有点难以解释。跳过示例可能更容易。
一个表有一个id和四列,每列都允许null。
ID, Col1, Col2, Col3, Col4
有x行。 (通常小于4)并且列中最多只能使用4个不同的值。
我希望最多返回4行,其中结果集中的每一行基本上都是一个列值,其中从右边开始选择值,从顶部保留Col编号。如果另一行的值不是列唯一的,则会转移到下一个可用列。
示例:
如果我有:
ID, Col1, Col2, Col3, Col4
0, A , B , , D
1, , , C ,
我想返回
A
B
C
D
和
ID, Col1, Col2, Col3, Col4
0, A , B , C ,
1, D , , ,
给出
A
B
C
D
谢谢!可以抛弃在值之间存在非唯一列和空格的情况 这不会发生:
a,b,,d
c,,,
这可能会有所帮助:
CREATE TABLE #original ( id int ,A INT, B INT, C INT, D INT );
INSERT INTO #original
SELECT 0,1,2,null,4
union
select 1,null,null,3,null
--SELECT 0,1,2,3,null
--union
--select 1,4,null,null,null
select * from #original order by id asc
DROP TABLE #original