【问题标题】:SQL: Create new column with values that isn't in either columnsSQL:使用不在任一列中的值创建新列
【发布时间】:2017-01-20 16:42:12
【问题描述】:

我基本上有这张表,其中 22 出现在 A 或 B 中:

A  |  B
---| ---
22 |  0 
32 |  22
45 |  22 
22 |  5

我想从此表中创建一个新列,该列仅包含非 22 行的值,例如

C  
-
0
32
45
5 

我该怎么做?

编辑:上表来源于此声明

SELECT A,B FROM table 
WHERE (A = '22' OR B = '22')

【问题讨论】:

  • 哦,我正在使用 SQL Server Management Studio 2008
  • 您想在实际表中或在您的选择查询结果中创建一个新列?
  • 可能出现两列都包含22的情况,如果是,那么C应该包含什么?
  • 我只想在结果中创建一个新列。 22 只会出现互斥。

标签: sql sql-server-2008 select


【解决方案1】:

类似的东西?

--drop table ##t1
select * 
into ##t1
from(
select 'a1'c1,'b1'c2 union all
select 'a2'c1,'b2'c2 union all
select 'a3'c1,'b3'c2 union all
select 'a4'c1,'a3'c2 union all
select 'a3'c1,'b4'c2 union all
select 'a5'c1,'b5'c2 
)t


select *,
       case when t2.c1 is null then t1.c1 else t1.c2 end c3
from ##t1 t1
left join
(
    select *
    from
    (
        select distinct c1
        from ##t1
    )t1
    join
    (
        select distinct c2
        from ##t1
    )t2
      on t1.c1=t2.c2
)t2
  on t1.c1=t2.c1

这是一个通用的解决方案

【讨论】:

    【解决方案2】:
     ALTER TABLE table_name
     ALTER COLUMN c INT
    
    UPDATE table_name
    SET c= CASE WHEN a<>22 THEN a ELSE b END
    

    【讨论】:

      【解决方案3】:

      你也可以试试这个:

      SELECT CASE WHEN a = 22 AND b=22 THEN 0 WHEN a = 22 and b != 22 THEN b ELSE a END c
      FROM #comm
      WHERE 22 IN (a,b)
      

      如果两者都有 22 那么它会返回 0 或者你可以改变值

      【讨论】:

      • 如果两者都是 22 则返回 0 是个好主意,对于我的表来说,它肯定只会出现在 A 或 B 中。
      【解决方案4】:

      首先,您必须在表格中添加一个 C 列,您就是这样做的:

       ALTER TABLE YourTableName
       ALTER COLUMN C decimal
      

      然后,您从 A、B 列检索值并将它们插入 C:

       INSERT INTO YourTableName(C)
       SELECT A,B
       FROM YourTableName WHERE A<>22 and B<>22
      

      【讨论】:

        【解决方案5】:
        SELECT A AS C FROM MYTABLE WHERE A != 22
        UNION 
        SELECT B AS C FROM MYTABLE WHERE B != 22 
        

        UNION 删除重复项

        【讨论】:

          【解决方案6】:

          您可以使用case 表达式来生成此输出:

          SELECT CASE a WHEN 22 THEN b ELSE a END AS c
          FROM   mytable 
          WHERE  22 IN (a, b)
          

          【讨论】:

            猜你喜欢
            • 2021-12-27
            • 2011-11-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-08
            • 2012-04-09
            • 2021-06-13
            • 1970-01-01
            相关资源
            最近更新 更多