आप इसे डायनामिक PIVOT
. के साथ कर सकते हैं और ROW_NUMBER()
समारोह:
DECLARE @cols AS VARCHAR(1000),
@query AS VARCHAR(8000)
SELECT @cols = STUFF((SELECT ',' + QUOTENAME(Name)
FROM (SELECT DISTINCT Name
FROM #test
)sub
ORDER BY Name
FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)')
,1,1,'')
PRINT @cols
SET @query = '
WITH cte AS (SELECT DISTINCT *
FROM #test)
,cte2 AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY Name ORDER BY Apt)RowRank
FROM cte)
SELECT *
FROM cte2
PIVOT (max(Apt) for Name in ('[email protected]+')) p
'
EXEC (@query)
SQL Fiddle - विशिष्ट सूची, विशिष्ट क्रम
संपादित करें:यदि आप नहीं चाहते कि सूची अलग हो, तो ऊपर दिए गए पहले सीटीई को समाप्त करें, और यदि आप मनमाने ढंग से आदेश देना चाहते हैं तो ORDER BY
बदलें करने के लिए (SELECT 1)
:
DECLARE @cols AS VARCHAR(1000),
@query AS VARCHAR(8000)
SELECT @cols = STUFF((SELECT ',' + QUOTENAME(Name)
FROM (SELECT DISTINCT Name
FROM #test
)sub
ORDER BY Name
FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)')
,1,1,'')
PRINT @cols
SET @query = '
WITH cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY Name ORDER BY (SELECT 1))RowRank
FROM #test)
SELECT *
FROM cte
PIVOT (max(Apt) for Name in ('[email protected]+')) p
'
EXEC (@query)
SQL Fiddle - पूरी सूची, मनमाना क्रम
और अंत में, यदि आप RowRank
. नहीं चाहते थे अपने परिणामों में फ़ील्ड, बस @cols
. का पुन:उपयोग करें आपके SELECT
. में वेरिएबल :
SET @query = '
WITH cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY Name ORDER BY (SELECT 1))RowRank
FROM #test)
SELECT '[email protected]+'
FROM cte
PIVOT (max(Apt) for Name in ('[email protected]+')) p
'
EXEC (@query)