繁体   English   中英

SQL查询协助-从CASE WHEN语句中删除重复项

[英]Sql Query Assistance - Removing Duplicates from CASE WHEN Statement

在编写查询以查看客户是否有特定产品时,我需要帮助。

如您从第一张图像中看到的,ID 4169137已返回2行。 我真的很想将结果合并到信号行中。 意思是,如果任一行中都有“是”,则返回“是”。 如果它们都为NO,则返回NO。

在此处输入图片说明

这是我希望输出看起来像的样子。

在此处输入图片说明

这是我一直在使用的查询。

SELECT  distinct A.ID as 'ID'
        ,(CASE WHEN b.isProductA = 1    THEN 'Yes' ELSE 'No' END) as 'A'
        ,(CASE WHEN b.isProductB = 1    THEN 'Yes' ELSE 'No' END) as 'B'
        ,(CASE WHEN b.isProductC = 1    THEN 'Yes' ELSE 'No' END) as 'C'        
        ,(CASE WHEN b.isProductD = 1    THEN 'Yes' ELSE 'No' END) as 'D'    
        ,(CASE WHEN b.isProductE = 1    THEN 'Yes' ELSE 'No' END) as 'E'
        ,(CASE WHEN b.isProductF = 1    THEN 'Yes' ELSE 'No' END) as 'F'                         
FROM  [source].[Opportunity] A 
        INNER JOIN
        (
            SELECT  distinct ProductFamilyName, isProductA, isProductB, isProductC, isProductD, isProductE, isProductF
            FROM [reference].[ProductFamilyMapping] B
        ) b ON a.ProductFamily = b.ProductFamilyName

无需大小写,只需直接使用聚合函数即可:

SELECT ID, 
  MAX(A) AS A,
  MAX(B) AS B,
  MAX(C) AS C,
  MAX(D) AS D,
  MAX(E) AS E,
  MAX(F) AS F
FROM ...
GROUP BY ID;

结果

|      ID |  A |  B |   C |   D |   E |   F |
|---------|----|----|-----|-----|-----|-----|
| 4169137 | no | no | yes | yes | yes | yes |

尝试这个

SELECT Z.ID as 'ID',
(CASE WHEN Z.isProductA > 0 THEN 'Yes' ELSE 'No' END) as 'A',
(CASE WHEN Z.isProductB > 0 THEN 'Yes' ELSE 'No' END) as 'B',
(CASE WHEN Z.isProductC > 0 THEN 'Yes' ELSE 'No' END) as 'C',        
(CASE WHEN Z.isProductD > 0 THEN 'Yes' ELSE 'No' END) as 'D',    
(CASE WHEN Z.isProductE > 0 THEN 'Yes' ELSE 'No' END) as 'E',
(CASE WHEN Z.isProductF > 0 THEN 'Yes' ELSE 'No' END) as 'F'
FROM
(
    SELECT A.ID, 
    SUM(b.isProductA) as total_A,
    SUM(b.isProductB) as total_B,
    SUM(b.isProductC) as total_C,
    SUM(b.isProductD) as total_D,
    SUM(b.isProductE) as total_E,
    SUM(b.isProductF) as total_F
    FROM  [source].[Opportunity] A 
    INNER JOIN
    (
        SELECT  distinct ProductFamilyName, isProductA, isProductB, isProductC, isProductD, isProductE, isProductF
        FROM [reference].[ProductFamilyMapping] B
    ) b ON a.ProductFamily = b.ProductFamilyName
    GROUP BY A.ID
) Z;  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM