复杂的动态SQL查询,加入自我

时间:2014-11-20 16:36:57

标签: mysql sql join self-join

我正在寻找一个棘手的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>

有关如何使其发挥作用的任何提示?

提前致谢!

1 个答案:

答案 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