有沒有漂亮的方式做到這一點,如果行數是可變的。
很大程度上建立在對此question的答案上,您需要在執行查詢之前動態構建查詢。
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
-- Build a list of ids for each of the selected rows
SELECT @cols = STUFF((SELECT ',[' + convert(varchar,ROW_NUMBER() OVER (ORDER BY LEFT([vorname],1),LEFT([Name],1) ) ) + ']'
FROM #ADR_Adressen
LEFT JOIN ADR_GruppenLink gl ON gl.AdressNrADR = a.AdressNrADR
WHERE a.Z_Klasse = 'BA' AND gl.GruppeADR != 'KIND'
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
-- Build a query using the list of IDs selected above. These are pivotted into column names
set @query = N'SELECT ' + @cols + N' from
(
select
ROW_NUMBER() OVER (ORDER BY LEFT([vorname],1),LEFT([Name],1) ) ID,
LEFT(vorname,1) + ''.'' + LEFT(Name,1) Name
from #ADR_Adressen a
LEFT JOIN ADR_GruppenLink gl ON gl.AdressNrADR = a.AdressNrADR
WHERE a.Z_Klasse = 'BA' AND gl.GruppeADR != 'KIND'
) x
pivot
(
max(Name)
for ID in (' + @cols + N')
) p
'
exec sp_executesql @query;
更新:由於沒有ID字段可我已經更新了這個從亞歷克斯納入ROW_NUMBER建議如下
Query example
嘗試看看[這裏]的一些想法(http://stackoverflow.com/questions/194852/concatenate-many-rows-into-a-single-text-string)。第二個看起來很簡單。 – SMM
爲什麼你需要數據作爲列?如果您只是爲了_display_目的轉換它,在顯示層(報表,網頁,表單等)中比在數據層中更容易。 –