Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查询不同的行值并分隔为不同的列_Sql_Pivot_Sybase - Fatal编程技术网

Sql 查询不同的行值并分隔为不同的列

Sql 查询不同的行值并分隔为不同的列,sql,pivot,sybase,Sql,Pivot,Sybase,我有一个表,其中包含以下内容: Customer ID Customer type --------- -------- 123 A 123 alpha 123 Beta 456 B 456

我有一个表,其中包含以下内容:

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

我不相信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
存在潜在问题。我的建议是将其与其他值单独列在一列中。这样就不会参与
行编号()
赋值,更容易保证出现正确的值

我建议您规范化数据模型。很明显,“A”和“Alpha”是不同类型的数据值(它们描述不同的东西),但它们在同一个字段中,这会给您带来各种各样的问题。以a为例,它对涉及的概念进行了很好的讨论


基本上,您希望得到的结果是在一个单独的表中包含alpha和beta类型的值,您可以通过客户ID和客户类型输入这些值。

这是我试图在实时数据库上实现的一个示例。我的实时数据库完全正常化了。关于如何解决上述问题,您还有其他建议吗?因此,因为它是一个实时数据库,我知道您可能没有自由解决规范化问题。但是,即使数据库的其余部分得到了很好的规范化,[Customer type]的使用方式也没有得到规范化。这就是为什么此表中有多个客户条目,例如123。如果Sybase有PIVOT,您可以使用它。您在这里使用的是row_number()函数。我有Sybase 11。这在Sybase ASE 11中是否有效。@user726720如果您没有
行号()
,则可以通过一系列联接来实现。我将尝试稍后发布一个版本