无法组合sql by group by子句中的行

无法组合sql by group by子句中的行,sql,sql-server,Sql,Sql Server,在SQLServer2005中,我想将三行合并为一行,我已经尝试使用GROUPBY子句,但无法将三行合并为一行 col1 col2 col3 9/6/2015 9/8/2015 9/15/2015 下面是我写的代码 select * from ( select case when postatus = 'y' and approverid = '1111' then Convert(varchar(10), trasdate

在SQLServer2005中,我想将三行合并为一行,我已经尝试使用GROUPBY子句,但无法将三行合并为一行

col1 col2 col3 9/6/2015 9/8/2015 9/15/2015 下面是我写的代码

select * from ( select case when postatus = 'y' and approverid = '1111' then Convert(varchar(10), trasdate ,103) end as [col1], case when postatus = 'y' and approverid = '401' then Convert(varchar(10), trasdate ,103) end as [col2], case when postatus = 'y' and ( approverid = '329' or approverid = '1495' or approverid = '1239') then Convert(varchar(10), trasdate ,103) end as [col3] from tblpo_approvalstatus where prnumber = '000002' ) as t group by col1,col2,col3 我得到的结果是

col1 col2 col3 9/6/2015 NULL NULL NULL 9/8/2015 NULL NULL NULL 9/15/2015 我想把它们排成一行

col1 col2 col3 9/6/2015 9/8/2015 9/15/2015 提前谢谢

你试过这个吗

select no, max([po date]), max([pr date]), max([qar date])
from t
group by no;

要聚合数据,请使用聚合函数。在您的情况下,每列只有一个值,因为prnumber+postatus+approverid在该表中是唯一的?也许他们建立了主键?,你可以使用最小值或最大值,甚至平均值,这没有什么区别

select 
  convert(varchar(10), max(case when postatus = 'y' and approverid = '1111' then trasdate end) ,103) as col1,
  convert(varchar(10), max(case when postatus = 'y' and approverid = '401' then trasdate end) ,103) as col2,
  convert(varchar(10), max(case when postatus = 'y' and approverid in ('329','1495','1239') then trasdate end) ,103) as col3
from tblpo_approvalstatus 
where prnumber = '000002';

顺便说一句,这里绝对不适合分组。对于GROUPBY x,y,你说请聚合我的数据,这样我就可以得到每个x和y的结果行,但你不想得到每个东西的一个结果行;您只需要一个结果行,因此不需要分组。

请将您尝试过的内容发布。@Thorsten,在结果中,我希望单行为2 fgh cde abc,谢谢,如果还有col1=3的记录;您想要两个结果行,一个用于2,一个用于3,还是仅一个?如果有:那么在col1中您期望哪个值?如果col1=2有两条记录,其中col2有两个不同的值,比如fgh和ijk,你会显示哪个值?@thorsten,下面是我的sp的部分代码,当postatus='y'和approverid='1111'时从选择框中选择*,然后Convertvarchar10,trasdate,103结束为[col1],当postatus='y'和approverid='401'时,则为Convertvarchar10,trasdate,103以[col2]结尾;当postatus='y'和approverid='329'或approverid='1495'或approverid='1239'时,则为Tplpo\u approvalstatus中的Convertvarchar10,trasdate,103以[col3]结尾,其中prnumber='000002'作为t group by col1,col2,col3i得到的结果是col1 col2 col3 9/6/2015 NULL NULL 9/8/2015 NULL NULL 9/15/2015,但我想将三行合并为单行col1 col2 col3 9/6/2015 9/8/2015 9/15/2015非常感谢,我得到了表中的结果,我正在尝试将代码放入存储过程中,非常感谢