/ / SQL अलग पंक्तियों पर प्रत्येक चयनित कॉलम के मान का चयन करें - sql, चुनें

एसक्यूएल अलग-अलग पंक्तियों पर प्रत्येक चयनित कॉलम के मान का चयन करें - एसक्यूएल, चुनें

मेरे पास सैकड़ों पंक्तियों और डब्ल्यू कॉलम के दसियों के साथ एक तालिका है:

Column1 | Column2_W | Column3_W | ColumnX_W
123   |     A     |     B     |    x
223   |     A     |    NULL   |  NULL

मैं इसे कैसे चुन सकता हूं ताकि आउटपुट हो:

Column1 | W
123   | A
123   | B
123   | x
223   | A

संपादित करें: मैं अच्छी तरह से जानता हूं कि मैं एक भयानक डीबी "डिजाइन" के साथ काम कर रहा हूं। दुर्भाग्य से मैं इसे बदल नहीं सकता। यह प्रश्न वास्तव में एक बड़ी समस्या का हिस्सा था जिसे मैं आज सौंप दिया गया था। मैं कल दिए गए विचारों की कोशिश करूंगा

उत्तर:

जवाब के लिए 3 № 1

इस लेख पर एक नज़र डालें: UNPIVOT: मक्खी पर डेटा को सामान्य करना

दुर्भाग्यवश, आप अपने द्वारा उपयोग किए जा रहे किसी भी समाधान के साथ कॉलम के नाम टाइप करते हुए अटक जाते हैं। यहां एक नमूना है। UNPIVOT SQL सर्वर में ...

SELECT Column1, W
FROM YourTable
UNPIVOT (W for Column1 in (Column2_W, Column3_W /* and so on */)) AS W

जवाब के लिए 6 № 2
SELECT Column1, Column2_W
FROM table

UNION ALL

SELECT Column1, Column3_W
FROM table

UNION ALL

SELECT Column1, Column4_W
FROM table
....
ORDER BY Column1

बेहतर विकल्प: अपने डेटाबेस को फिर से डिज़ाइन करें! यह एक स्प्रेडशीट की तरह दिखता है, रिलेशनल डेटाबेस नहीं।


जवाब के लिए 0 № 3

यदि आपके पास कोई भी UNPIVOT विकल्प नहीं है ...

SELECT
Column1,
CASE ColumnID WHEN 2 THEN Column2_W
WHEN 3 THEN Column3_W
...
WHEN X THEN ColumnX_W
END AS Column2
FROM
yourTable
CROSS JOIN
(          SELECT 2 AS ColumnID
UNION ALL SELECT 3
...
UNION ALL SELECT X
)
AS UnPivot