हमारा लीगेसी ऐप निम्न स्वरूप में SQL तालिका में डेटा निर्यात करता है:

**Row#** | **Column#** | **Parameter** | **Value**

जैसे

1 | 1 | Name  | Michael

1 | 2 | Age   | 30

1 | 3 | email | email@email.com

2 | 1 | Name  | Brian

2 | 2 | Age   | 45

2 | 3 | email | brian@email.com

और मुझे, केवल SQL का उपयोग करके, कुछ इस तरह वापस करना होगा

**Name** | **Age** | **email**

Michael  |    30   | email@email.com

Brian    |    45   | brian@email.com

क्या यह संभव है? यदि हां, तो कैसे? आगे की जानकारी:

  • कॉलम की संख्या और कॉलम के नाम निश्चित हैं और इन्हें हार्ड कोड किया जा सकता है

  • पंक्तियों की संख्या निश्चित नहीं है

sql
1
Michael 25 फरवरी 2011, 16:56

4 जवाब

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

आप PIVOT का उपयोग कर सकते हैं, या समुच्चय के साथ कुछ मज़ेदार:

SELECT
    Row#,
    MAX(CASE WHEN Parameter='Name' THEN Value END) as Name,
    MAX(CASE WHEN Parameter='Age' THEN Value END) as Age,
    MAX(CASE WHEN Parameter='email' THEN Value END) as Email
FROM
    Table
group by
    Row#

सटीक सिंटैक्स, और किस विकल्प का उपयोग करना है, यह इस बात पर निर्भर करेगा कि आप किस SQL ​​​​डेटाबेस का उपयोग कर रहे हैं

5
Damien_The_Unbeliever 25 फरवरी 2011, 17:02

आपको एक PIVOT या CROSS TAB क्वेरी चाहिए। इसके लिए आपके आरडीबीएमएस को विशेष सहायता मिल सकती है। यदि निम्नलिखित नहीं है तो AFAIK कहीं भी काफी काम करना चाहिए।

SELECT
       MAX(CASE WHEN Column=1 then Value END) AS Name,
       MAX(CASE WHEN Column=2 then Value END) AS Age,
       MAX(CASE WHEN Column=3 then Value END) AS Email
FROM YourTable
GROUP BY row
2
Martin Smith 25 फरवरी 2011, 17:02
SELECT
        A.Name,
        B.Age,
        C.email
FROM
        myTable A
        LEFT OUTER JOIN myTable B
            ON A.Row = B.Row
                AND B.Parameter = 'Age'
        LEFT OUTER JOIN myTable C
            ON A.Row = C.Row
                AND C.Parameter = 'email'
WHERE
        A.Parameter = 'Name'

आवश्यकतानुसार अधिक तालिका उपनामों के साथ जारी रखें। ध्यान दें कि यदि आपकी तालिका बहुत चौड़ी है, तो इसे बनाए रखना कठिन हो सकता है।

2
Toby 25 फरवरी 2011, 17:04

तो आपका डेटा Entity-Attribute-Value फ़ॉर्मैट में है। यह असामान्य नहीं है।

आप इसे जुड़ने की एक श्रृंखला, या एक पिवट ऑपरेशन के साथ सारणीबद्ध प्रारूप में स्थानांतरित कर सकते हैं।

देखें SQL जॉइन विधियों के लिए /stackoverflow.com/questions/5118051/is-sql-powerful-enough-to-do-this/5118109#5118109">जवाब

यदि आप SQL सर्वर का उपयोग कर रहे हैं, तो SQL Server PIVOT कमांड क्या यह कुछ इस तरह दिखेगा:

    SELECT Row
    , [Name] 
    , [age] 
    , [email] 
    FROM 
    (
        SELECT [Row], [Parameter], [Value]
        FROM EAV_Data
    ) p
    PIVOT
    (
        MAX ([Value])
        FOR Parameter IN ([Name], [age], [email])
    ) AS pvt
2
Community 23 मई 2017, 14:47