SSMS
 sql >> डेटाबेस >  >> Database Tools >> SSMS

समान आईडी वाली पंक्तियों के समूहों को दूसरी तालिका में स्थानांतरित करना

यह वास्तव में एक धुरी है, जिसे क्रॉसस्टैब भी कहा जाता है, या कभी-कभी स्थानांतरित होता है

कुछ डेटाबेस में इसे करने के लिए समर्पित सुविधाएं हैं, अन्य को आपको ग्रुपिंग सिंटैक्स का उपयोग करना होगा। मैं बाद वाले को पसंद करता हूं क्योंकि यह सार्वभौमिक रूप से काम करता है

अगर यह कोई सांत्वना है, तो आप वाकई करीब थे!

SELECT
    DIM_KEY,
    MAX(CASE WHEN ATTR_NAME = 'UPC' THEN VALUE END) as UPC,
    MAX(CASE WHEN ATTR_NAME = 'DAIRY_CLM' THEN VALUE END) as DAIRY_CLM,
    MAX(CASE WHEN ATTR_NAME = 'KOSHER_CLM' THEN VALUE END) as KOSHER_CLM,
    MAX(CASE WHEN ATTR_NAME = 'FAT' THEN VALUE END) as FAT,
    MAX(CASE WHEN ATTR_NAME = 'CALORIES' THEN VALUE END) as CALORIES
FROM demo
GROUP BY DIM_KEY

यह कैसे काम करता है?

ठीक है, यदि आप गैर-समूहीकृत, अधिकतम-फ़ंक्शन संस्करण नहीं चलाते हैं जो आपके पास पहले से था:

SELECT
    DIM_KEY,
    (CASE WHEN ATTR_NAME = 'UPC' THEN VALUE END),
    (CASE WHEN ATTR_NAME = 'DAIRY_CLM' THEN VALUE END),
    (CASE WHEN ATTR_NAME = 'KOSHER_CLM' THEN VALUE END),
    (CASE WHEN ATTR_NAME = 'FAT' THEN VALUE END),
    (CASE WHEN ATTR_NAME = 'CALORIES' THEN VALUE END)
FROM
   demo

तब आप देखेंगे कि आपका डेटा "विकर्ण" हो गया है:

3005, 123423, null, null...
3005, null,   N,    null...
3005, null,   null, Y   ...

प्रत्येक कॉलम में (प्रति dim_key) केवल एक मान होता है, शेष शून्य होते हैं

GROUP BY और MAX में जोड़ने से ये एक ही पंक्ति में ढह जाते हैं क्योंकि MAX() कॉलम से केवल मान लौटाएगा और सभी नल गायब हो जाएंगे। यह एक समूह की एक आंतरिक संपत्ति है, कि पंक्ति डेटा "एक साथ नहीं रहता" - किसी विशेष DIM_KEY के समूह के भीतर, MAX (DAIRY_CLM) किसी भी पंक्ति से आ सकता है, MAX (KOSHER_CLM) किसी भी अन्य पंक्ति से आ सकता है। व्यवहार में इसका मतलब है कि एकल मान चुने जाते हैं, नल छोड़ दिए जाते हैं, वे सभी एक ही पंक्ति में दिखाई देते हैं..

..और इस प्रकार आपका लंबवत डेटा विकर्ण से गुजरने के बाद क्षैतिज हो गया



  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. बीएसीपीएसी को ब्लॉब स्टोरेज से एसएसएमएस में आयात करने का प्रयास करते समय क्रिएट यूजर एरर प्राप्त करना

  2. SQL सर्वर प्रबंधन स्टूडियो का डिफ़ॉल्ट स्थापना पथ बदलें

  3. एंटिटी फ्रेमवर्क कोर में एक अप्सर्ट के रूप में अटैच का उपयोग करें

  4. SQL सर्वर प्रबंधन स्टूडियो:आइकन अर्थ

  5. टी-एसक्यूएल में एक एकल फ़ील्ड मान को एकाधिक निश्चित-लंबाई वाले कॉलम मानों में विभाजित करें