मेरे पास एक डेटा स्रोत है जो इस तरह स्वरूपित बिक्री के लिए लेनदेन का वर्णन करता है:

    Transaction |    Date   | Location |    UPC    | LineNumber
----------------+-----------+----------+-----------+------------
         123    | 7/2/2016  | Store A  | 123456789 |      1
         123    | 7/2/2016  | Store A  | 123965478 |      2
         124    | 7/2/2016  | Store A  | 123456789 |      1
         124    | 7/2/2016  | Store A  | 123459879 |      2
         124    | 7/2/2016  | Store A  | 123456789 |      3
         123    | 7/3/2016  | Store B  | 123456789 |      1
         123    | 7/3/2016  | Store B  | 958685458 |      2

हमारे रिपोर्टिंग टूल में इस डेटा का उपयोग करने के लिए, मुझे इसे लेन-देन-स्थान के रूप में अद्वितीय और यूपीसी के साथ लाइन नंबर के आधार पर कॉलम के रूप में प्रारूपित करने की आवश्यकता है:

Transaction |    Date   |  UPC 1    |   UPC 2   |  UPC 3
------------+-----------+-----------+----------
123-Store A | 7/2/2016  | 123456789 | 123965478 |   NULL
124-Store A | 7/2/2016  | 123456789 | 123459879 | 123456789
123-Store B | 7/3/2016  | 123456789 | 958685458 |   NULL

किसी भी विचार की सराहना की जाती है

0
David Rogers 16 अगस्त 2016, 23:41
2
आपको गतिशील धुरी की खोज करनी चाहिए। इसे यहां हजारों बार पूछा और उत्तर दिया गया है।
 – 
Sean Lange
16 अगस्त 2016, 23:49
क्या लाइन नंबर 3 तक सीमित है?
 – 
Shnugo
16 अगस्त 2016, 23:52
बीटीडब्ल्यू: आपको संस्कृति विशिष्ट दिनांक-समय प्रारूपों से बचना चाहिए। मुझे लगता है कि आप जुलाई में दिनों के बारे में बात कर रहे हैं, लेकिन यह फरवरी और मार्च भी हो सकता है ...
 – 
Shnugo
16 अगस्त 2016, 23:53
सीन की टिप्पणी का पालन करें ... इस साइट पर बार-बार गतिशील पिवट का उत्तर दिया गया है और आपको वह मिलना चाहिए जो आपको चाहिए। आप थोड़ा और जटिल हो जाएंगे क्योंकि आप एक समग्र कुंजी पर शामिल होंगे ... और उस पर एक वर्चर, यह एक उच्च प्रदर्शन करने वाली क्वेरी नहीं हो सकती है।
 – 
Twelfth
16 अगस्त 2016, 23:55

1 उत्तर

सबसे बढ़िया उत्तर

मानक PIVOT चाल चलेगा। PIVOT को कॉल करने से पहले आपको बस CTE या नेस्टेड सेलेक्ट में अपने कॉनटेनेटेड ट्रांजैक्शन कॉलम को परिभाषित करना होगा।

DECLARE @Table AS TABLE ([Transaction] INT, Date DATE, Location VARCHAR(15), UPC INT, LineNumber INT)
INSERT INTO @Table ([Transaction], Date, Location, UPC, LineNumber)
VALUES
(123,'7/2/2016','Store A',123456789,1)
,(123,'7/2/2016','Store A',123965478,2)
,(124,'7/2/2016','Store A',123456789,1)
,(124,'7/2/2016','Store A',123459879,2)
,(124,'7/2/2016','Store A',123456789,3)
,(123,'7/3/2016','Store B',123456789,1)
,(123,'7/3/2016','Store B',958685458,2)

;WITH cteCombineTransLocation AS (
    SELECT
       CAST([Transaction] AS VARCHAR(50)) + '-' + Location as [Transaction]
       ,Date
       ,UPC
       ,LineNumber
    FROM
       @Table
)

SELECT
    [Transaction]
    ,[Date]
    ,[1] as UPC1
    ,[2] as UPC2
    ,[3] as UPC3
FROM
    cteCombineTransLocation
    PIVOT (
       MAX(UPC)
       FOR LineNumber IN ([1],[2],[3])
    ) p

यदि आप अधिक यूपीसी कॉलम चाहते हैं या यदि वह संख्या गतिशील है तो टिप्पणीकारों ने बताया कि आप गतिशील एसक्यूएल का उपयोग कर सकते हैं, लेकिन आपको अभी भी अपना समेकित क्षेत्र तैयार करना होगा।

1
Matt 16 अगस्त 2016, 23:56
धन्यवाद जिसने बहुत मदद की। मेरे पास धुरी थी लेकिन सीटीई लापता कड़ी थी
 – 
David Rogers
17 अगस्त 2016, 01:00