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中,行数()和行数(按工作划分)都不是。