把几张临时表组合成一张临时表
有临时表如下:
#a:
Item2013-2-12013-2-22013-2-32013-2-42013-2-5
a 1 2 3 4 5
#b:
Item2013-2-12013-2-22013-2-32013-2-42013-2-5
b 1.1 2.2 3 4 5
#c:
Item2013-2-12013-2-22013-2-32013-2-42013-2-5
c 1.1 5 13 4 5
#d:
Item2013-2-12013-2-22013-2-32013-2-42013-2-5
d 7 1 11 2 9
组合成一张临时表如下:
Item2013-2-12013-2-22013-2-32013-2-42013-2-5
a 1 2 3 4 5
b 1.1 2.2 3 4 5
c 1.1 5 13 4 5
d 7 1 11 2 9
问题在于,除了“Item”字段,其它字段都是未知的,不过最多只有15个,如何组合成以上的样式?
请不吝赐教!
[解决办法]
提供个思路,先将所有的临时表做行列转置,从行转成列
Item
a2013-2-1 1
a 2013-2-2 2
a2013-2-3 3
b 2013-2-4 4
b 2013-2-5 5
然后再进行行列转置,转回去,成为你想要的那种表格
[解决办法]
CREATE TABLE #t1 (item VARCHAR(5),d1 VARCHAR(15),d2 VARCHAR(15),d3 VARCHAR(15),d4 VARCHAR(15),d5 VARCHAR(15))
CREATE TABLE #t2 (item VARCHAR(5),d1 VARCHAR(15),d2 VARCHAR(15),d6 VARCHAR(15),d7 VARCHAR(15),d8 VARCHAR(15))
CREATE TABLE #t3 (item VARCHAR(5),d4 VARCHAR(15),d5 VARCHAR(15),d9 VARCHAR(15),d14 VARCHAR(15),d15 VARCHAR(15))
INSERT #t1 SELECT 'a',1,2,3,4,5
INSERT #t2 SELECT 'b',4,5,9,14,7
INSERT #t3 SELECT 'c',9,41,34,19,71
----
SELECT * FROM (
SELECT * FROM #t1 UNPIVOT ( ccc for aaa IN (d1,d2,d3,d4,d5)) bBB1
UNION all
SELECT * FROM #t2 UNPIVOT ( ccc for aaa IN (d1,d2,d6,d7,d8)) bBB2
UNION all
SELECT * FROM #t3 UNPIVOT ( ccc for aaa IN (d4,d5,d9,d14,d15)) bBB3) bbbb
PIVOT (MAX(ccc) FOR aaa IN (d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15)) cccc
-----结果
itemd1d2d3d4d5d6d7d8d9d10d11d12d13d14d15
a12345NULLNULLNULLNULLNULLNULLNULLNULLNULLNULL
b45NULLNULLNULL9147NULLNULLNULLNULLNULLNULLNULL
cNULLNULLNULL941NULLNULLNULL34NULLNULLNULLNULL1971