मुझे पता है कि यहां कई अनपिनत/क्रॉस चर्चाएं हैं लेकिन मैं अपनी समस्या को शामिल करने वाली कोई भी चर्चा नहीं ढूंढ पा रहा था। जो मैंने अभी तक प्राप्त किया है वह निम्नलिखित है:टीएसक्यूएल नामित पंक्तियों के साथ एकाधिक कॉलम unpivot संभव है?
SELECT Perc, Salary
FROM (
SELECT jobid, Salary_10 AS Perc10, Salary_25 AS Perc25, [Salary_Median] AS Median
FROM vCalculatedView
WHERE JobID = '1'
GROUP BY JobID, SourceID, Salary_10, Salary_25, [Salary_Median]
) a
UNPIVOT (
Salary FOR Perc IN (Perc10, Perc25, Median)
) AS calc1
अब, मैं क्या चाहता हूं कि कई अन्य कॉलम, उदाहरण के लिए। एक नाम बोनस जिसे मैं भी Perc10, Perc25 और Median पंक्तियों में रखना चाहता हूँ।
एक विकल्प के रूप में, मैंने क्रॉस लागू करने के साथ एक प्रश्न भी बनाया, लेकिन यहां ऐसा लगता है कि आप पंक्तियों को "बल" नहीं कर सकते जैसे कि आप अनपॉट के साथ कर सकते हैं। दूसरे शब्दों में, मेरे पास कस्टम प्रकार नहीं हो सकता है, लेकिन केवल एक प्रकार है जो तालिका के भीतर किसी संख्या के अनुसार है, अगर मैं सही हूं? कम से कम, यहां मुझे परिणाम मिलना है जैसे मैं चाहता हूं, लेकिन पंक्तियां गलत क्रम में हैं और मेरे पास पेर्क 10 जैसी पंक्तियां नहीं हैं जो अच्छी होंगी।
SELECT crossapplied.Salary,
crossapplied.Bonus
FROM vCalculatedView v
CROSS APPLY (
VALUES
(Salary_10, Bonus_10)
, (Salary_25, Bonus_25)
, (Salary_Median, Bonus_Median)
) crossapplied (Salary, Bonus)
WHERE JobID = '1'
GROUP BY crossapplied.Salary,
crossapplied.Bonus
पर्स यहां पर प्रतिशत के लिए खड़ा है।
+--------------+---------+-------+
| Calculation | Salary | Bonus |
+--------------+---------+-------+
| Perc10 | 25 | 5 |
| Perc25 | 35 | 10 |
| Median | 27 | 8 |
+--------------+---------+-------+
मैं कुछ याद आती है या मैंने कुछ गलत किया कार्य करें:
आउटपुट कुछ इस तरह होना करने का इरादा है? मैं एमएसएसएलएल 2014 का उपयोग कर रहा हूं, आउटपुट एसएसआरएस में जा रहा है। अग्रिम में किसी भी संकेत के लिए बहुत बहुत धन्यवाद! स्पष्टीकरण के लिए
संपादित करें:
+--------------+---------+
| Calculation | Salary |
+--------------+---------+
| Perc10 | 25 |
| Perc25 | 35 |
| Median | 27 |
+--------------+---------+
तो यह कॉलम "बोनस" यहाँ का अभाव: Unpivot-विधि निम्नलिखित उत्पादन देता है।
पार लागू करें-विधि निम्नलिखित उत्पादन देता है: तो अगर आप इसे इरादा उत्पादन की तुलना, आप ध्यान देंगे कि कॉलम "गणना" याद आ रही है और पंक्ति सॉर्टिंग गलत है
+---------+-------+
| Salary | Bonus |
+---------+-------+
| 35 | 10 |
| 25 | 5 |
| 27 | 8 |
+---------+-------+
(ध्यान दें कि पंक्ति 25 | 5 पहले की बजाय दूसरी पंक्ति में है)।
संपादित करें 2: देखें की परिभाषा और नमूना डेटा: दृश्य मूल रूप से तालिका के गणना वाले कॉलम जोड़ता है। तालिका में, मुझे प्रत्येक जॉब आईडी के लिए वेतन और बोनस जैसे कॉलम मिल गए हैं। देखें तो सिर्फ इस तरह प्रतिशतक गणना करता है:
Select
Percentile_Cont(0.1)
within group (order by Salary)
over (partition by jobID) as Salary_10,
Percentile_Cont(0.25)
within group (order by Salary)
over (partition by jobID) as Salary_25
from Tabelle
तो उत्पादन की तरह है:
+----+-------+---------+-----------+-----------+
| ID | JobID | Salary | Salary_10 | Salary_25 |
+----+-------+---------+-----------+-----------+
| 1 | 1 | 100 | 60 | 70 |
| 2 | 1 | 100 | 60 | 70 |
| 3 | 2 | 150 | 88 | 130 |
| 4 | 3 | 70 | 40 | 55 |
+----+-------+---------+-----------+-----------+
अंत में, दृश्य एक संग्रहीत प्रक्रिया में parameterized कर दिया जाएगा।
आपका 'vCalculatedView' अग्रिम में गणना करने के लिए लगता है ... आपका' समूह by' कुछ नहीं कर रहा है ... कृपया अपने बयान के साथ परिणाम दिखाएं और कुछ नमूना डेटा और अपेक्षित आउटपुट प्रदान करें। – Shnugo
क्रॉस लागू कोड में समूह कुछ करता है: यदि मैं इसे नहीं डालता, तो Perc10, Perc25, Median दोहराएगा। ऐसा इसलिए है क्योंकि एक जॉब आईडी कर्मचारी आईडी नहीं है और इस तरह, एक नौकरी आईडी में एक से अधिक कर्मचारी हो सकते हैं। – ksauter
ठीक है। मुझे पता है तुम्हारा क्या मतलब है। हो सकता है कि एक 'सीईटीई' 'चयन डिस्टिंट' के साथ है जिसे आप चाहते हैं। 'ग्रुप बाय' आप 'MAX()' या 'SUM()' जैसे समेकन के लिए उपयोग करेंगे, कृपया अपनी वर्तमान क्वेरी का परिणाम प्रदान करें और आपका डेटा कैसा दिखाना चाहिए। – Shnugo