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

Sql查询帮助-从CASE-WHEN语句中删除重复项,sql,sql-server,Sql,Sql Server,我需要帮助写一个查询,看看客户是否有特定的产品 正如您将从第一个图像中看到的,ID4169137返回了2行。我真的想把结果合并成一个信号行。也就是说,如果任一行中都有YES,则返回YES。如果两者都是NO,则返回NO 下面是我希望输出的样子 这是我一直在处理的问题 SELECT distinct A.ID as 'ID' ,(CASE WHEN b.isProductA = 1 THEN 'Yes' ELSE 'No' END) as 'A' ,(CA

我需要帮助写一个查询,看看客户是否有特定的产品

正如您将从第一个图像中看到的,ID4169137返回了2行。我真的想把结果合并成一个信号行。也就是说,如果任一行中都有YES,则返回YES。如果两者都是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 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;  

不需要case,直接使用聚合函数即可:

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 |

通过将“否”转换为0,将“是”转换为1,并检查每列的总和是否大于0,您能在数字上做到这一点吗?感谢Vashi的反馈。我不断收到以下错误“Z附近的语法不正确”