当前位置: 代码迷 >> Sql Server >> 超难SQL, 求专家相助写!
  详细解决方案

超难SQL, 求专家相助写!

热度:59   发布时间:2016-04-24 09:24:37.0
超难SQL, 求专家帮助写!!!



如图所示,我想查询出 所有同时拥有001, 001001, 001002值的OrgGUID,
上图的结果应该是:
032A55BB-9260-42F1-930B-3B5C98C7EE85,
085f9a91-e8f0-4606-8dcf-a6957aeb84be,
0A7BBEDF-04D6-473C-B655-1761CECC1155,
0A90E198-5466-4AA2-9A7B-3C82CBA28AD5,
0D31C8FA-0F22-41C3-9E04-353B2B6C8AD4
------解决思路----------------------
WITH a AS (
         SELECT orgguid,
                SUM(CASE WHEN CodeFunction = '001' THEN 1 ELSE 0) AS sum_001,
                SUM(CASE WHEN CodeFunction = '001001' THEN 1 ELSE 0) AS 
                sum_001001,
                SUM(CASE WHEN CodeFunction = '001002' THEN 1 ELSE 0) AS 
                sum_001002
         FROM   tbl
         GROUP BY
                OrgGuid
     )

SELECT orgguid
FROM   a
WHERE  sum_001 > 0
       AND SUM_001001 > 0
       AND SUM_001002 > 0 

------解决思路----------------------

SELECT orgguid
FROM tbl
GROUP BY OrgGuid
HAVING 
SUM(CASE WHEN CodeFunction = '001' THEN 1 ELSE 0 END)>0 AND 
SUM(CASE WHEN CodeFunction = '001001' THEN 1 ELSE 0 END)>0 AND 
SUM(CASE WHEN CodeFunction = '001002' THEN 1 ELSE 0 END)>0
  相关解决方案