यदि आप PIVOT
. लागू करने जा रहे हैं फ़ंक्शन, आपको परिणाम प्राप्त करने के लिए एक समग्र फ़ंक्शन का उपयोग करने की आवश्यकता होगी, लेकिन आप row_number()
जैसे विंडोिंग फ़ंक्शन का भी उपयोग करना चाहेंगे। खाते में प्रत्येक संपर्क के लिए एक अद्वितीय अनुक्रम उत्पन्न करने के लिए।
सबसे पहले, आप अपने डेटा को इसी तरह क्वेरी करेंगे:
select account, contact,
'contact'
+ cast(row_number() over(partition by account
order by contact) as varchar(10)) seq
from yourtable
डेमो के साथ SQL Fiddle देखें। यह अद्वितीय अनुक्रम के साथ एक नया कॉलम बनाएगा:
| ACCOUNT | CONTACT | SEQ |
|---------|-----------|----------|
| 1 | 324324324 | contact1 |
| 1 | 674323234 | contact2 |
यदि आपके पास सीमित संख्या में कॉलम हैं, तो आप अपनी क्वेरी को हार्ड-कोड कर सकते हैं:
select account,
contact1, contact2, contact3, contact4
from
(
select account, contact,
'contact'
+ cast(row_number() over(partition by account
order by contact) as varchar(10)) seq
from yourtable
) d
pivot
(
max(contact)
for seq in (contact1, contact2, contact3, contact4)
) piv;
डेमो के साथ SQL Fiddle देखें
यदि आपके पास अज्ञात संख्या में स्तंभ हैं, तो आपको गतिशील SQL का उपयोग करना होगा:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(seq)
from
(
select 'contact'
+ cast(row_number() over(partition by account
order by contact) as varchar(10)) seq
from yourtable
) d
group by seq
order by seq
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT account, ' + @cols + '
from
(
select account, contact,
''contact''
+ cast(row_number() over(partition by account
order by contact) as varchar(10)) seq
from yourtable
) x
pivot
(
max(contact)
for seq in (' + @cols + ')
) p '
execute sp_executesql @query;
डेमो के साथ SQL Fiddle देखें। दोनों आपको इसका परिणाम देंगे:
| ACCOUNT | CONTACT1 | CONTACT2 | CONTACT3 | CONTACT4 |
|---------|-----------|-----------|-----------|-----------|
| 1 | 324324324 | 674323234 | (null) | (null) |
| 2 | 433243443 | 833343432 | (null) | (null) |
| 3 | 787655455 | (null) | (null) | (null) |
| 4 | 455435435 | 754327545 | (null) | (null) |
| 5 | 432432432 | 432433242 | 432455553 | 543544355 |