我想处理一个困难的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元组的数量。
你有什么建议可以让我把这个用起来吗?
提前谢谢!
最佳答案
你可以试试这个。它起作用了
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
关于mysql - 复杂的动态SQL查询,自行连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27044828/