Sql查询帮助 - 从CASE WHEN语句中删除重复项

问题描述 投票:2回答:2

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

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

enter image description here

这是我想要输出的样子。

enter image description here

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

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
sql sql-server
2个回答
3
投票

不需要大小写,只需直接使用聚合函数:

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;

Results

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

1
投票

试试这个

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;  
© www.soinside.com 2019 - 2024. All rights reserved.