2017-07-20 30 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