我现在有一个表A 有五个字段
职工号 补贴A 补贴B 补贴C 补贴D
1 21 NULL 25 NULL
2 NULl 32 68 12
3 NULL NULL 58 56
4 NULL 45 NULL NUll
我想在 想 抽出的结果是
职工号 补贴A 补贴B 补贴C 补贴D
1 21 25 NULL NULL
2 32 68 12 NULL
3 58 56 NULl NULL
4 45 NULl NULL NULL
就是把 有值的 往前放 没值的 往后面放 求Sql 语句 ???
sql
------解决方案--------------------
if OBJECT_ID('tempdb..#temp', 'u') is not null drop table #temp;
go
create table #temp( [职工号] varchar(100), [补贴A] INT, [补贴B] INT, [补贴C] INT, [补贴D] INT);
insert #temp
select '1','21',null,'25',null union all
select '2',null,'32','68','12' union all
select '3',null,null,'58','56' union all
select '4',null,'45',null,null
--SQL:
SELECT *
FROM
(
SELECT 职工号,xx,补贴类型=(CASE rowid WHEN 1 THEN '补贴A' WHEN 2 THEN '补贴B' WHEN 3 THEN '补贴C' WHEN 4 THEN '补贴D' END) FROM
(
select rowid=ROW_NUMBER() OVER(PARTITION BY 职工号 ORDER BY GETDATE()),职工号,xx
from #temp a
UNPIVOT
(xx FOR yy IN([补贴A],[补贴B],[补贴C],[补贴D])) b
) t
) m
PIVOT
(MAX(xx) FOR 补贴类型 IN([补贴A],[补贴B],[补贴C],[补贴D])) n