SQL:如何动态组合行?

时间:2019-06-27 17:43:11

标签: sql sql-server-2008-r2

我需要以非常特定的格式获取结果

尝试创建临时表,但不知道如何仅在特定条件下进行组合

create table #Temptable1
(static1 varchar(100), idnum varchar(100), static2 varchar(100), reg 
decimal, ovt decimal, other decimal, static3 varchar(100))

insert into #temptable1

Select

'D00',
e.idnum,
' ',
case when p.Pdn =1 then (isnull(sum(p.hours),0))*100 else 0 end,
case when p.Pdn =2 then (isnull(sum(p.hours),0))*100 else 0 end,
case when p.Pdn in (4,17) then (isnull(sum(p.hours),0))*100 else 0 end,
case when p.Pdn =4 then 20 when Pdn =17 then 23 else 0 end

from e, p

where e.filekey=p.filekey and p.Pdn in (1,2,4,17)
group by e.idnum, p.Pdn 

order by e.idnum

select static1, idnum, static2, sum(reg), sum(ovt), sum(other), static3 from 
#temptable1

group by static1, static2, static3, idnum

static1   idnum  static2     reg    ovt    other    static3
D00       64                 6475   25     0         0
D00       64                 0      0      800       20
D00       64                 0      0      775       23

这都是很好的信息,但是我需要这样的格式:

static1   idnum   static2    reg    ovt    other    static3
D00       64                 6475   25     800       20
D00       64                 0      0      775       23
换句话说,如果其他时间中除了0以外没有其他时间,并且static3可以。如果有几个小时,则必须位于同一行。如果有多个其他对象(按static3分组),则第一个出现在第一行,随后的一个出现在它们自己的行中,Reg和Ovt为0

0 个答案:

没有答案