这应该可以做到...快速、简单、快速的解决方案。
DECLARE @Products table
(
CustomerNumber int
, Product nvarchar(50)
)
INSERT @Products VALUES (1, 'BROKERAGE')
INSERT @Products VALUES (1, 'CHECKI[NG')
INSERT @Products VALUES (1, 'CREDIT CARD')
INSERT @Products VALUES (2, 'SAVINGS')
INSERT @Products VALUES (2, 'LIFE INSURANCE')
;WITH
ProductTypes AS
(
SELECT
CustomerNumber
, SUM(CASE WHEN Product IN ('CHECKING', 'CREDIT CARD', 'SAVINGS') THEN 1 ELSE 0 END) AS Bank
, SUM(CASE WHEN Product IN ('BROKERAGE', 'MUTUAL FUND') THEN 1 ELSE 0 END) AS Investments
, SUM(CASE WHEN Product IN ('LIFE INSURANCE') THEN 1 ELSE 0 END) AS Life
FROM @Products
GROUP BY CustomerNumber
)
SELECT
Products.CustomerNumber
, Products.Product
, CASE WHEN Bank > 0 THEN 'Y' ELSE 'N' END AS Bank
, CASE WHEN Investments > 0 THEN 'Y' ELSE 'N' END AS Investments
, CASE WHEN Life > 0 THEN 'Y' ELSE 'N' END AS Life
FROM @Products AS Products
LEFT JOIN ProductTypes ON (ProductTypes.CustomerNumber = Products.CustomerNumber)
此版本已被修改,以考虑到您正在执行初始连接以获取源表的评论。
DECLARE @Customer table
(
CustomerNumber int
)
INSERT @Customer VALUES (1)
INSERT @Customer VALUES (2)
DECLARE @Products table
(
CustomerNumber int
, Product nvarchar(50)
)
INSERT @Products VALUES (1, 'BROKERAGE')
INSERT @Products VALUES (1, 'CHECKI[NG')
INSERT @Products VALUES (1, 'CREDIT CARD')
INSERT @Products VALUES (2, 'SAVINGS')
INSERT @Products VALUES (2, 'LIFE INSURANCE')
;WITH
CustomerProducts AS
(
SELECT
Customer.CustomerNumber
, Products.Product
FROM @Customer AS Customer
LEFT JOIN @Products AS Products ON (Products.CustomerNumber = Customer.CustomerNumber)
)
, ProductTypes AS
(
SELECT
CustomerNumber
, SUM(CASE WHEN Product IN ('CHECKING', 'CREDIT CARD', 'SAVINGS') THEN 1 ELSE 0 END) AS Bank
, SUM(CASE WHEN Product IN ('BROKERAGE', 'MUTUAL FUND') THEN 1 ELSE 0 END) AS Investments
, SUM(CASE WHEN Product IN ('LIFE INSURANCE') THEN 1 ELSE 0 END) AS Life
FROM CustomerProducts
GROUP BY CustomerNumber
)
SELECT
CustomerProducts.CustomerNumber
, CustomerProducts.Product
, CASE WHEN Bank > 0 THEN 'Y' ELSE 'N' END AS Bank
, CASE WHEN Investments > 0 THEN 'Y' ELSE 'N' END AS Investments
, CASE WHEN Life > 0 THEN 'Y' ELSE 'N' END AS Life
FROM CustomerProducts
LEFT JOIN ProductTypes ON (ProductTypes.CustomerNumber = CustomerProducts.CustomerNumber)