找到一个减去另一列的列

时间:2018-03-14 18:29:34

标签: sql

在sql-server中,同一个表中有三列,我想从Column_A和Column_B创建Column_C 我想进入sql中的同一个表

 Column_A  Column_B Column_C
    1,2,3,4      2,3
     1,2,3        1



    Column_A  Column_B Column_C
     1,2,3,4      2,3  1,4
     1,2,3        1    2,3 

3 个答案:

答案 0 :(得分:1)

如果您使用Postgres,则可以安装intarray扩展名,然后解决方案就像:

select column_a, 
       column_b, 
       array_to_string(
          string_to_array(column_a,',')::int[] - string_to_array(column_b,',')::int[]
       , ',') as column_c
from badly_designed_table
尽管设计很糟糕。

string_to_array(column_a,',')::int[]将字符串转换为数组。

intarray扩展提供了-运算符,用于从第一个数组中删除第二个数组中包含的元素。

array_to_string()然后将数组转换回字符串。

答案 1 :(得分:0)

我很不确定实际的桌子是什么样的,或者是那个问题的专栏...但是我现在会给你一般的回复,如果你需要别的东西,你可以告诉我:

SELECT (ColumnA - ColumnB) AS Column C
FROM tablename 

但由于你的桌子没有标准化,这非常令人困惑。同样,你不应该在表中存储用逗号分隔的多个值,因为你可以这样做,但它会使SQL开发变得更加困难。

答案 2 :(得分:0)

这应该这样做。它使用空字符串替换Column_A中存在的Column_B的字符串。它还涉及潜在的双重逗号和前导/尾随逗号

SELECT Column_A,
       Column_B,
       LTRIM(
         RTRIM(
           REPLACE(
             REPLACE(Column_A,
                     Column_B,
                     ''),
             ',,',
             ','),
           ','),
         ',') AS Column_C
  FROM Table1

这对Oracle SQL来说是正确的。如果您使用的是其他DBMS,我认为您只需要使用相应的TRIM语法。