2016-09-21 65 views
0

我有表ASQL表改造

customerID Product 
------------------- 
101   A 
101   B 
102   B 
102   C 

希望它像变换为表B:

customerID ProductA ProductB ProductC 
--------------------------------------- 
101    1  1  0 
102    0  1  1 

我的最终目标是利用这个中间表得到表C是这样的:

customerID Product_Combo 
-------------------------- 
101    AB 
102    BC 

我想我知道如何将它从B更改为C但是如何从A去B?谢谢!假设我们这样做是MS SQL,我们只有三种产品A,B和C

+1

请用您正在使用的数据库标记您的问题。另外,您可能需要一组更具代表性的数据。总是最多只有两种产品? –

回答

0

最简单的方法是使用情况:

SELECT custId 
,MAX(CASE WHEN product = 'A' THEN 1 ELSE 0 END) AS productA 
,MAX(CASE WHEN product = 'B' THEN 1 ELSE 0 END) AS productB 
,MAX(CASE WHEN product = 'C' THEN 1 ELSE 0 END) AS productC 
FROM A 
Group by custId 

结果

custId productA productB productC 
101 1    1   0 
102 0    1   1 
0

您可以使用光标对CustomerID,而这个SQL:

declare @Products varchar(10) = ''; 

--start cursor 
set @Products = ''; 
SELECT @Products = @Products + [Product] 
    FROM [test].[dbo].[TableA] 
    WHERE customerId = @cursor 

print @Products 
--end cursor 
0

您可以使用这样的查询来获取分为B

SELECT 
    CustomerId, 
    CASE 
     WHEN [A] = 'A' THEN 1 
     ELSE 0 
    END AS ProductA, 
    CASE 
     WHEN [B] = 'B' THEN 1 
     ELSE 0 
    END AS ProductB, 
    CASE 
     WHEN [C] = 'C' THEN 1 
     ELSE 0 
    END AS ProductC 
FROM #tableA 
PIVOT (MAX(Product) FOR Product IN ([A], [B], [C])) AS p