我正在寻找一个棘手的SQL查询。我很感激如何在表上实现这种相对复杂的SQL查询。
我目前有一张表格如下:
caseId scanId attribute
-----------------------
1 2 A
1 4 A
2 3 B
3 NULL NULL
我希望能够实现这个表:
caseId scanId1 scanId2 attribute1 attribute2 count
--------------------------------------------------
1 2 4 A A 2
2 3 NULL B NULL 1
3 NUL NULL NULL NULL 0
我知道这涉及到自己加入表,但是我无法想出如何动态地生成所需的列数(scanId1,scanId2等),这取决于唯一的caseId元组的数量。 / p>
有关如何使其发挥作用的任何提示?
提前致谢!
答案 0 :(得分:0)
你可以试试这个。它的工作原理
SELECT
caseId,
MAX(CASE WHEN scanId IN (2,3) THEN scanId ELSE NULL END) AS scanId1,
MAX(CASE WHEN scanId=4 THEN scanId ELSE NULL END ) AS scanId2,
MAX(CASE WHEN attribute =('A', 'B')THEN attribute ELSE NULL END) AS attribute1,
MAX(CASE WHEN attribute IN ('A') THEN attribute ELSE NULL END ) AS attribute2,
count(scanId) AS counts
FROM
GGG
GROUP BY
caseId