首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将表单元格更新为仅具有唯一值

将表单元格更新为仅具有唯一值
EN

Stack Overflow用户
提问于 2017-07-21 07:49:50
回答 2查看 222关注 0票数 0

我有一个包含grade_range列的数据库表,该列的行包含用逗号分隔的重复值(类似于列表)。

代码语言:javascript
复制
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"

我想要更新这些记录,以便在此列的行中只剩下唯一的值,如下所示

代码语言:javascript
复制
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中轻松选择不同的列值

代码语言:javascript
复制
SELECT DISTINCT grade_range FROM dev.school

但是,我不确定如何在行单元格中选择/更新不同的值。我想到的一种方法是在Excel中操作这些数据,然后使用基于相同sidUPDATE语句更新记录。

对于在SQL中实现这一点有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2017-07-21 07:53:07

使用此函数可将逗号分隔值转换为行,然后使用distince,然后再次将它们连接起来

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2017-07-21 12:14:16

优先。创建一个函数来区分数组

打开psql。在psql中输入\ef。将内容替换为以下函数:

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION public.array_unique(arr anyarray)
RETURNS anyarray 
LANGUAGE sql AS 
$function$
  select array( select distinct unnest($1) )
$function$

。玩游戏

假设每个元素不断地被逗号和空格分割。我们可以将每行拆分成数组格式,将其与先前的函数区分开来,然后将其转换回字符串。

代码语言:javascript
复制
SELECT 
   array_to_string(array_unique(regexp_split_to_array(grade, E', ')), ',') as grade_distinct, 
   grade 
FROM 
   your_table;

结果

代码语言:javascript
复制
localhost:5432 user@database=# 
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45226862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档