2017-07-20 47 views
0

我有一個grade_range列的數據庫表,該列的行包含重複的值,所有的值都用逗號分隔(如列表)。更新表格單元格只有唯一值

grade_range 
"Pre-K, Pre-K, Pre-K" 
"Pre-K, K-9, K-9" 
"Pre-K, K-7, 9-12" 
"Pre-K, K-7, K-7" 
"Pre-K, K-6" 
"Pre-K, K-5" 

我希望如此,我只有在此列的行中的唯一值留下,這樣

grade_range 
"Pre-K" 
"Pre-K, K-9" 
"Pre-K, K-7, 9-12" 
"Pre-K, K-7" 
"Pre-K, K-6" 
"Pre-K, K-5" 

鮮明的列值可以在SQL中使用很容易選擇更新這些記錄 -

SELECT DISTINCT grade_range FROM dev.school 

但我不知道如何選擇/更新行單元格內的不同值。我想要做的一種方式是在Excel中操縱這些數據,然後使用基於相同的UPDATE聲明更新記錄sid s

任何關於在SQL中完成此操作的建議?

+0

@a_horse_with_no_name PostgreSQL的弟弟 – hky404

回答

1

使用此功能的逗號分隔值轉換爲行 然後用distince然後再次將它們連接起來

ALTER FUNCTION [dbo].[Split] 
    (
     @List varchar(max), 
     @SplitOn nvarchar(5) 
    ) 
    RETURNS @RtnValue table 
    (

     ID int identity(1,1), 
     Val varchar(max) 
    ) 
    AS 
    BEGIN 
     While (Charindex(@SplitOn,@List)>0) 
     Begin 

      Insert Into @RtnValue (Val) 
      Select 
       Val = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1))) 

      Set @List = Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List)) 
     End 

     Insert Into @RtnValue (Val) 
     Select Value = ltrim(rtrim(@List)) 

     Return 
    END 
1

1日。創建功能以區分陣列

打開psql。裏面psql類型\ef。用此功能替換內容:

CREATE OR REPLACE FUNCTION public.array_unique(arr anyarray) 
RETURNS anyarray 
LANGUAGE sql AS 
$function$ 
    select array(select distinct unnest($1)) 
$function$ 

2nd。玩遊戲

假設每個元素不斷被逗號和空格分開。我們可以將每行拆分爲數組格式,將其與前一個函數區分開來,然後將其轉換回字符串。

SELECT 
    array_to_string(array_unique(regexp_split_to_array(grade, E', ')), ',') as grade_distinct, 
    grade 
FROM 
    your_table; 

結果

localhost:5432 [email protected]=# 
SELECT 
    array_to_string(array_unique(regexp_split_to_array(grade, E', ')), ',') as grade_distinct, 
    grade 
FROM 
    tmp_stack_overflow; 

grade_distinct |  grade   
----------------+--------------------- 
Pre-K   | Pre-K, Pre-K, Pre-K 
Pre-K,K-9  | Pre-K, K-9, K-9 
Pre-K,K-7,9-12 | Pre-K, K-7, 9-12 
Pre-K,K-7  | Pre-K, K-7, K-7 
K-6,Pre-K  | Pre-K, K-6 
K-5,Pre-K  | Pre-K, K-5 
(6 rows) 
+0

array_unique功能信貸這個帖子:https://stackoverflow.com/a/41725011/341959 – Brain90