在编写查询以查看客户是否具有特定产品时,我需要帮助。
正如您将从第一张图片中看到的那样,ID 4169137已返回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 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;