0

我有一个包含以下内容的表:

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 查询来实现这个吗?

4

2 回答 2

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

请参阅带有演示的 SQL Fiddle

注意:我发现第一列数据存在潜在问题CustomerType。我的建议是将它放在与其他值不同的列中。那么这将不参与row_number()分配,并且更容易保证出现正确的值。

于 2012-12-23T17:25:14.073 回答
0

让我建议您规范化您的数据模型。显然,“A”与“Alpha”是不同类型的数据值(它们描述不同的事物),但是您将它们放在同一个字段中,这会给您带来各种问题。看看这篇关于数据库规范化的文章,它对所涉及的概念进行了很好的讨论。

基本上,您最终想要在一个单独的表中拥有 alpha 和 beta 类型值,您可以通过 Customer ID 和 Customer Type 键入。

于 2012-12-23T17:26:40.120 回答