नमूना तालिका
SELECT * INTO #tblStock
FROM
(
SELECT 'A' PartCode, 10 StockQty, 'WHs-A' Location
UNION ALL
SELECT 'B', 22, 'WHs-A'
UNION ALL
SELECT 'A', 1, 'WHs-B'
UNION ALL
SELECT 'C', 20, 'WHs-A'
UNION ALL
SELECT 'D', 39, 'WHs-F'
UNION ALL
SELECT 'E', 3, 'WHs-D'
UNION ALL
SELECT 'F', 7, 'WHs-A'
UNION ALL
SELECT 'A', 9, 'WHs-C'
UNION ALL
SELECT 'D', 2, 'WHs-A'
UNION ALL
SELECT 'F', 54, 'WHs-E'
)TAB
गतिशील पिवट के लिए कॉलम जाओ और zero
DECLARE @cols NVARCHAR (MAX)
SELECT @cols = COALESCE (@cols + ',[' + Location + ']', '[' + Location + ']')
FROM (SELECT DISTINCT Location FROM #tblStock) PV
ORDER BY Location
-- Since we need Total in last column, we append it at last
SELECT @cols += ',[Total]'
--Varible to replace NULL with zero
DECLARE @NulltoZeroCols NVARCHAR (MAX)
SELECT @NullToZeroCols = SUBSTRING((SELECT ',ISNULL(['+Location+'],0) AS ['+Location+']'
FROM (SELECT DISTINCT Location FROM #tblStock)TAB
ORDER BY Location FOR XML PATH('')),2,8000)
SELECT @NullToZeroCols += ',ISNULL([Total],0) AS [Total]'
साथ NULL
की जगह आप CUBE
का उपयोग पंक्ति और स्तंभ की कुल खोजने के लिए कर सकते हैं और साथ NULL
की जगह से उत्पन्न पंक्तियों के लिए Total
CUBE
। NULL
बजाय 0 में से यदि आप चाहते हैं:
परिणाम
नोट परिणाम
DECLARE @query NVARCHAR(MAX)
SET @query = 'SELECT PartCode,' + @NulltoZeroCols + ' FROM
(
SELECT
ISNULL(CAST(PartCode AS VARCHAR(30)),''Total'')PartCode,
SUM(StockQty)StockQty ,
ISNULL(Location,''Total'')Location
FROM #tblStock
GROUP BY Location,PartCode
WITH CUBE
) x
PIVOT
(
MIN(StockQty)
FOR Location IN (' + @cols + ')
) p
ORDER BY CASE WHEN (PartCode=''Total'') THEN 1 ELSE 0 END,PartCode'
EXEC SP_EXECUTESQL @query
- Click here देखने परमूल्यों के रूप में, गतिशील धुरी कोड में
@cols
बजाय @NulltoZeroCols
का उपयोग संपादित करें:
1. दिखाएँ केवल कुल
- कोड
SELECT @cols += ',[Total]'
और SELECT @NullToZeroCols += ',ISNULL([Total],0) AS [Total]'
का प्रयोग न करें पंक्ति।
CUBE
के बजाय ROLLUP
का उपयोग करें।
2. दिखाएँ केवल स्तंभ कुल
- उपयोग कोड
SELECT @cols += ',[Total]'
और SELECT @NullToZeroCols += ',ISNULL([Total],0) AS [Total]'
।
CUBE
के बजाय ROLLUP
का उपयोग करें।
GROUP BY Location,PartCode
से GROUP BY PartCode,Location
बदलें।
ORDER BY CASE WHEN (PartCode=''Total'') THEN 1 ELSE 0 END,PartCode
के बजाय, WHERE PartCode<>''TOTAL'' ORDER BY PartCode
का उपयोग करें।
अद्यतन: ओपी
मैं परिणाम के साथ PartName
जोड़ने के लिए नीचे दिए गए क्वेरी को अद्यतन करने के लिए कर रहा हूँ PartName
लाने के लिए। चूंकि PartName
CUBE
के साथ अतिरिक्त परिणाम जोड़ देगा और AND
या OR
स्थितियों में भ्रम से बचने के लिए, आपके स्रोत तालिका में DISTINCT
मानों के साथ पिवोट किए गए परिणाम में शामिल होना बेहतर होगा।
DECLARE @query NVARCHAR(MAX)
SET @query = 'SELECT P.PartCode,T.PartName,' + @NulltoZeroCols + ' FROM
(
SELECT
ISNULL(CAST(PartCode AS VARCHAR(30)),''Total'')PartCode,
SUM(StockQty)StockQty ,
ISNULL(Location,''Total'')Location
FROM #tblStock
GROUP BY Location,PartCode
WITH CUBE
) x
PIVOT
(
MIN(StockQty)
FOR Location IN (' + @cols + ')
) p
LEFT JOIN
(
SELECT DISTINCT PartCode,PartName
FROM #tblStock
)T
ON P.PartCode=T.PartCode
ORDER BY CASE WHEN (P.PartCode=''Total'') THEN 1 ELSE 0 END,P.PartCode'
EXEC SP_EXECUTESQL @query
मैंने आपके समाधान और स्पष्टीकरण के लिए @Soka –
अपडेट किया है, वास्तव में मुझे क्या चाहिए, धन्यवाद @ सरथ अवानावु। – Sokea
आपका स्वागत है :) @ सोका –