sql查询在sybase中将动态列转换为行,或不使用任何透视函数

sql查询在sybase中将动态列转换为行,或不使用任何透视函数,sql,sybase-ase15,Sql,Sybase Ase15,我对表格的输入 id value 1 23 1 22 1 24 2 55 2 44 我的输出应该是 1 23|22|24 2 55|44 请帮助提供可在sybase数据库中运行的查询。您可以使用行号()执行此操作,该行号应在您的sybase版本中提供: select id, stuff((max(case when seqnum = 1 then '|' + value else '' end) + max(case

我对表格的输入

id  value
1    23
1    22
1    24
2    55
2    44
我的输出应该是

1 23|22|24
2 55|44

请帮助提供可在sybase数据库中运行的查询。

您可以使用
行号()执行此操作,该行号应在您的sybase版本中提供:

select id,
       stuff((max(case when seqnum = 1 then '|' + value else '' end) +
              max(case when seqnum = 2 then '|' + value else '' end) +
              max(case when seqnum = 3 then '|' + value else '' end) +
              max(case when seqnum = 4 then '|' + value else '' end)
             ), 1, 1, '') as vals
from (select t.*, row_number() over (partition by id order by value) as seqnum
      from t
     ) t
group by id;

id是否有最大值数?为什么要使用Sybase版本?您希望这些值位于Sybase db产品(ASE?IQ?SQLAnywhere?Advantage?)的单个列中还是三个不同的列中?SQLAnywhere/IQ具有一些在ASE中不可用的pivot功能。。。因此,至少我们需要知道哪个Sybase产品(和版本也最好知道)@Gordon--id有最大值,对于一个id,可以有3条记录;对于另一个id,可以有4条记录。@一匹马--最好是以单行管道分隔的值,否则值为具有不同列的单行应该是一个解决方案选项。在sybase ASE中,行数()和行数(按工作划分)都不是。