TSQL查询-基于条件的新列

时间:2019-10-29 11:51:19

标签: sql-server tsql

我有一个如下表。根据以下条件,C列将成为新列:

  1. 对于A列中的每个项目(具有相同的值,例如全1或全2),无论它属于A组和B组(B列),都应= A组(如C列)
  2. 但是在(第B列中)项目编号3不属于A组(第B列)的情况下,它应该仅默认为第C列中的B列值。
Column A | Column B | Column C
   1     | Group A  | Group A
   1     | Group B  | Group A
   2     | Group A  | Group A
   2     | Group C  | Group A
   3     | Group C  | Group C
   3     | Group E  | Group E  

这比我以前想的要棘手,因为问题在于确定哪些行属于列A中的相同值以应用条件。

谢谢

1 个答案:

答案 0 :(得分:1)

如果我对您的理解是正确的,则可以尝试使用不带SUM()子句的窗口化ORDER BY的以下方法(以使用整个分区中的行):

表格:

CREATE TABLE #Data (
    ColumnA int,
    ColumnB varchar(10)
)
INSERT INTO #Data 
    (ColumnA, ColumnB)
VALUES
    (1, 'Group A'),  
    (1, 'Group B'),  
    (2, 'Group A'),  
    (2, 'Group C'),  
    (3, 'Group C'),  
    (3, 'Group E')     

声明:

SELECT 
    ColumnA,
    ColumnB,
    CASE 
        WHEN SUM(CASE WHEN ColumnB IN ('Group A', 'Group B') THEN 1 ELSE 0 END) OVER (PARTITION BY ColumnA) > 0 THEN 'Group A'
        ELSE ColumnB
    END AS ColumnC
FROM #Data

结果:

ColumnA ColumnB ColumnC
1       Group A Group A
1       Group B Group A
2       Group A Group A
2       Group C Group A
3       Group C Group C
3       Group E Group E