सभी मैं चाहता हूँ इस को बदलने के लिए हैदिखाएँ एसक्यूएल परिणाम
Department | 201601 Print | 201601 Copy | 201602 Print | 201602 Copy | 201603 Print | 201603 Copy
------------------------------------------------------------------------------------------
Dept 1 | 10 | 20 | 30 | 40 | 50 | 60
Dept 2 | 20 | 10 | 40 | 30 | 60 | 50
मैं PIVOT
साथ स्क्रिप्ट का निर्माण करने की कोशिश कर रहा था, लेकिन मैं पता नहीं कैसे कॉलम में प्रत्येक अवधि के "प्रिंट" और "कॉपी" दोनों को दिखाने के लिए। इसके अलावा, चूंकि 'अवधि' के मान अज्ञात होंगे इसलिए मैं स्क्रिप्ट में मूल्य को हार्ड-कोड भी नहीं कर सकता।
SELECT [Department]
,[201601] AS [201601 Copy]
,[201602] AS [201602 Copy]
,[201603] AS [201603 Copy]
FROM
(SELECT [Copy], [Period], [Department] from #tempTable) AS ST
PIVOT
(SUM([Copy]) FOR [Period] IN ([201601],[201602],[201603])) AS PT
और यहाँ मेरे नमूना डेटा के साथ तालिका बनाने के लिए स्क्रिप्ट है:
IF OBJECT_ID('tempdb..#tempTable') IS NOT NULL
DROP TABLE #tempTable
CREATE TABLE #tempTable(
[Period] varchar(50)
,[Department] varchar(50)
,[Print] int
,[Copy] int
)
INSERT INTO #tempTable VALUES
('201601', 'Dept 1', 10, 20)
,('201601', 'Dept 2', 20, 10)
,('201602', 'Dept 1', 30, 40)
,('201602', 'Dept 2', 40, 30)
,('201603', 'Dept 1', 50, 60)
,('201603', 'Dept 2', 60, 50)
पहले से कोई उत्तर के लिए धन्यवाद
यहाँ मेरी प्रयास है।
उत्तर
मुझे प्राप्त जवाब का अध्ययन किया और अंत में नीचे स्क्रिप्ट का निर्माण:
DECLARE @sql AS varchar(max);
SELECT @sql = 'SELECT [Department],' +
STUFF((
SELECT DISTINCT
',SUM(ISNULL(CASE [Period] WHEN ''' + [Period] + ''' THEN [Print] END, 0)) AS [' + [period] + ' Print]' +
',SUM(ISNULL(CASE [Period] WHEN ''' + [Period] + ''' THEN [Copy] END, 0)) AS [' + [period] + ' Copy]'
FROM #TempTable
FOR XML PATH('')
), 1, 1, '') +
'FROM #TempTable
GROUP BY [Department]';
PRINT @sql
EXEC(@sql);
एक स्प्रेडशीट के लिए एक सतही समानता के बावजूद, एसक्यूएल टेबल बहुत अलग जानवरों रहे हैं - पंक्तियों और स्तंभों आम तौर पर परस्पर विनिमय नहीं कर रहे हैं। यदि यह पूरी तरह से * प्रस्तुति * उद्देश्यों के लिए है, तो यह प्रस्तुति/रिपोर्ट परत में ऐसा करना बेहतर होगा, डेटाबेस नहीं। –
अपना उत्तर इस प्रकार पोस्ट करें - एक उत्तर दें और अगर आपको लगता है कि कोई भी प्रस्तावित उत्तर आपकी समस्या हल नहीं करता है (बेहतर)। –