Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

कॉलम के लिए SQL पंक्तियाँ

आप इसे SQL के साथ नहीं कर सकते हैं (गतिशील प्रश्नों को छोड़कर), जब तक कि आप डिज़ाइन समय में स्तंभों (अर्थात प्रश्नों) की संख्या नहीं जानते।

आपको अपने इच्छित डेटा को सारणीबद्ध प्रारूप में खींचना चाहिए और फिर इसे क्लाइंट साइड पर संसाधित करना चाहिए:

SELECT  *
FROM    Question
LEFT OUTER JOIN
        Response
ON      Response.QuestionId = Question.QuestionID

या, शायद, यह (SQL Server 2005+ में) , Oracle 8i+ और PostgreSQL 8.4+ ):

SELECT  *
FROM    (
        SELECT  q.*, ROW_NUMBER() OVER (ORDER BY questionID) AS rn
        FROM    Question q
        ) q
LEFT OUTER JOIN
        (
        SELECT  r.*, ROW_NUMBER() OVER (PARTITION BY questionID ORDER BY ResponseID) AS rn
        FROM    Response r
        ) r
ON      r.QuestionId = q.QuestionID
        AND q.rn = r.rn
ORDER BY
        q.rn, q.QuestionID

बाद वाली क्वेरी आपको इस फॉर्म में परिणाम देगी (बशर्ते आपके पास 4 . हो प्रश्न):

rn      question      response
---          ---           ---
1     Question 1  Response 1.1
1     Question 2  Response 2.1
1     Question 3  Response 3.1
1     Question 4  Response 4.1
2     Question 1  Response 1.2
2     Question 2  Response 2.2
2     Question 3  NULL
2     Question 4  Response 4.2
3     Question 1  NULL
3     Question 2  NULL
3     Question 3  Response 3.3
3     Question 4  NULL

, यह rn . के साथ तालिका के रूप में डेटा को आउटपुट करेगा पंक्ति संख्या को चिह्नित करना।

हर बार जब आप rn देखते हैं क्लाइंट पर बदलते हुए, आप बस <tr> . को बंद कर दें और नया खोलें।

आप सुरक्षित रूप से अपना <td> . डाल सकते हैं प्रति परिणाम एक पंक्ति है, क्योंकि प्रत्येक rn . के लिए समान संख्या या पंक्तियों को वापस करने की गारंटी है

यह अक्सर पूछे जाने वाला प्रश्न है।

SQL कॉलम की गतिशील संख्या के साथ डेटा वापस करने के लिए बस एक सही उपकरण नहीं है।

SQL सेट पर काम करता है, और कॉलम लेआउट एक सेट की एक अंतर्निहित संपत्ति है।

आपको उस सेट के लेआउट को परिभाषित करना चाहिए जिसे आप डिज़ाइन समय में प्राप्त करना चाहते हैं, ठीक उसी तरह जैसे आप C में किसी वैरिएबल के डेटाटाइप को परिभाषित करते हैं ।

C कड़ाई से परिभाषित चर के साथ काम करता है, SQL कड़ाई से परिभाषित सेट के साथ काम करता है।

ध्यान दें कि मैं यह नहीं कह रहा हूं कि यह सबसे अच्छा तरीका संभव है। यह बिल्कुल वैसा ही है SQL काम करता है।

अपडेट करें:

SQL Server में , आप तालिका को HTML . में खींच सकते हैं डेटाबेस के ठीक बाहर फॉर्म:

WITH    a AS
        (
        SELECT  a.*, ROW_NUMBER() OVER (PARTITION BY question_id ORDER BY id) AS rn
        FROM    answer a
        ),
        rows AS (
        SELECT  ROW_NUMBER() OVER (ORDER BY id) AS rn
        FROM    answer a
        WHERE   question_id =
                (
                SELECT  TOP 1 question_id
                FROM    answer a
                GROUP BY
                        question_id
                ORDER BY
                        COUNT(*) DESC
                )
        )
SELECT  (
        SELECT  COALESCE(a.value, '')
        FROM   question q
        LEFT JOIN
                a
        ON      a.rn = rows.rn
                AND a.question_id = q.id
        FOR XML PATH ('td'), TYPE
        ) AS tr
FROM    rows
FOR XML PATH(''), ROOT('table')

अधिक विवरण के लिए मेरे ब्लॉग में इस प्रविष्टि को देखें:

  • गतिशील धुरी


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. इंसर्ट अपडेट ट्रिगर कैसे निर्धारित करें कि इंसर्ट या अपडेट कैसे करें

  2. कॉमा से अलग किए गए कॉलम के मान को पंक्तियों में बदलें

  3. डेटाबेस मेल खाता अपडेट करें (SSMS)

  4. T-SQL के साथ SQL सर्वर एजेंट शेड्यूल बनाएं

  5. मैं SQL सर्वर में लिंक किए गए डेटाबेस सर्वर कैसे बनाऊं और क्वेरी करूं?