我有一张表格,其中包含以下内容:
Customer ID Customer type
--------- --------
123 A
123 alpha
123 Beta
456 B
456 BGamma
456 BBeta
我想实现以下目标:
Customer_ID Customer_type Customer_E1 Customer E_2 Customer E_3
--------- ----------- ----------- ------------- -------------
123 A Alpha Beta
456 B BGamma BBeta
你能帮我解决一下Sybase查询吗?
答案 0 :(得分:1)
我认为Sybase不具备PIVOT
功能,而您正在尝试这样做。因此,您可以实现类似这样的使用聚合函数和CASE
语句的内容:
select customerid,
max(case when rn = 1 then customertype else null end) CustomerType,
max(case when rn = 2 then customertype else null end) Customer_E1,
max(case when rn = 3 then customertype else null end) Customer_E2
from
(
select CustomerID, CustomerType,
row_number() over(partition by CustomerID order by CustomerID) rn
from yourtable
) src
group by customerid
注意:我发现第一列数据CustomerType
存在潜在问题。我的建议是将其与其他值分开列。然后,这将不会参与row_number()
分配,并且更容易保证将出现正确的值。
答案 1 :(得分:0)
我建议您规范化数据模型。很明显,'A'与'Alpha'是不同类型的数据值(它们描述不同的东西),但是你将它们放在同一个领域,这会导致各种各样的问题。拿一个look at this article on database normalization,对所涉及的概念进行了很好的讨论。
基本上,您希望最终得到的是在单独的表中包含alpha和beta类型的值,您可以通过客户ID和客户类型键入。