更新表格单元格以仅具有唯一值

Posted

技术标签:

【中文标题】更新表格单元格以仅具有唯一值【英文标题】:update table cells to only have unique values 【发布时间】:2017-07-20 23:49:49 【问题描述】:

我有一个带有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 中操作这些数据,然后使用基于相同 sids 的 UPDATE 语句更新记录

关于在 SQL 中完成此任务的任何建议?

【问题讨论】:

@a_horse_with_no_name PostgreSQL 兄弟 【参考方案1】:

使用此函数将逗号分隔的值转换为行 然后使用区别然后再次连接它们

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

【讨论】:

【参考方案2】:

第一。创建一个函数来区分数组

打开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$

第二。玩游戏

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

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

结果

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)

【讨论】:

array_unique 函数归功于这篇文章:***.com/a/41725011/341959

以上是关于更新表格单元格以仅具有唯一值的主要内容,如果未能解决你的问题,请参考以下文章

在Google表格中将具有相同值的多个单元格与一个单元格合并以求平均值

使用随机着色的单元格以5×5表格呈现

iOS Swift:滑动表格单元格以执行操作(不显示)

如何设置表格视图以仅在 ios 中显示单行?

自定义表格单元格以显示图像

允许触摸表格单元格以取消其他当前触摸