我想处理一个困难的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/

10-17 03:08