【问题标题】:complex dynamic SQL query, joining on self复杂的动态 SQL 查询,自我连接
【发布时间】:2015-01-18 14:57:11
【问题描述】:

我正在寻求解决一个困难的 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 元组的数量。

关于如何让它发挥作用的任何提示?

提前致谢!

【问题讨论】:

  • 谷歌:“MySQL 动态支点”。如果您的列数是动态的,那么您需要使用 prepare/execute 语句,并且在这个主题上有很多很好的答案。
  • 遗憾的是,您没有可用的表示层(例如 PHP)
  • @Gordon - Googling MSSQL dynamic pivot 让您回到堆栈溢出 here...
  • 谢谢,我将这些查询与 PHP 一起使用,因此我能够以这种方式处理数据,而不是尝试使用 mySQL 本身创建数据透视表

标签: mysql sql join self-join


【解决方案1】:

你可以试试这个。有效

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-02
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 2011-10-08
    相关资源
    最近更新 更多