在SQL Server中,我们有40条记录,包含15列。我想将所有这些记录合并为一列,即1行中40 * 15 = 600列。
例如,样本表有几条记录:
sn Name city cntry conti
------------------------------
1 abc NYC USA NA
2 def LON UK EU
3 xyz DUB UAE ASIA
然后合并所有记录&进入一个记录然后它应该如下:
sn Name city cntry conti sn Name city cntry conti sn Name city cntry conti
1 abc NYC USA NA 2 def LON UK EU 3 xyz DUB UAE ASIA
答案 0 :(得分:3)
你可以试试这个。
DECLARE @SqlText NVARCHAR(MAX) = 'SELECT * FROM MyTable T1 '
SELECT @SqlText = @SqlText + ' INNER JOIN MyTable AS T'+ CONVERT(VARCHAR, sn) +' ON T'+CONVERT(VARCHAR, sn) +'.sn = ' + CONVERT(VARCHAR, sn)
FROM MYTable WHERE sn > 1
order by sn
SET @SqlText = @SqlText + ' WHERE T1.sn = 1'
EXEC ( @SqlText )
生成此查询作为结果。
SELECT * FROM MyTable T1
INNER JOIN MyTable AS T2 ON T2.sn = 2
INNER JOIN MyTable AS T3 ON T3.sn = 3
WHERE T1.sn = 1
结果:
sn Name city cntry conti sn Name city cntry conti sn Name city cntry conti
----------- ---------- ---------- ---------- ---------- ----------- ---------- ---------- ---------- ---------- ----------- ---------- ---------- ---------- ----------
1 abc NYC USA NA 2 def LON UK EU 3 xyz DUB UAE ASIA
答案 1 :(得分:1)
请求看起来很奇怪,但这是使用dynamic sql
IF ( Object_id('tempdb..#Table1') IS NOT NULL )
DROP TABLE #Table1
CREATE TABLE #Table1
(
[sn] INT,
[Name] VARCHAR(3),
[city] VARCHAR(3),
[cntry] VARCHAR(3),
[conti] VARCHAR(4)
);
INSERT INTO #Table1
([sn],[Name],[city],[cntry],[conti])
VALUES (1,'abc','NYC','USA','NA'),
(2,'def','LON','UK','EU'),
(3,'xyz','DUB','UAE','ASIA');
DECLARE @col_list VARCHAR(max)=''
SELECT @col_list = Stuff((SELECT ',sn = max(case when sn = '
+ Cast(sn AS VARCHAR(50))
+ ' then sn end), Name = max(case when sn = '
+ Cast(sn AS VARCHAR(50))
+ ' then name end), city = max(case when sn = '
+ Cast(sn AS VARCHAR(50))
+ ' then city end), cntry = max(case when sn = '
+ Cast(sn AS VARCHAR(50))
+ ' then cntry end), conti = max(case when sn = '
+ Cast(sn AS VARCHAR(50))
+ ' then conti end)'
FROM #Table1
ORDER BY sn
FOR xml path('')), 1, 1, '')
EXEC('select '+@col_list+' from #Table1')
结果:
+----+------+------+-------+-------+----+------+------+-------+-------+----+------+------+-------+-------+
| sn | Name | city | cntry | conti | sn | Name | city | cntry | conti | sn | Name | city | cntry | conti |
+----+------+------+-------+-------+----+------+------+-------+-------+----+------+------+-------+-------+
| 1 | abc | NYC | USA | NA | 2 | def | LON | UK | EU | 3 | xyz | DUB | UAE | ASIA |
+----+------+------+-------+-------+----+------+------+-------+-------+----+------+------+-------+-------+