我有一个如下表。根据以下条件,C列将成为新列:
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中的相同值以应用条件。
谢谢
答案 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