मैं जेमी से सहमत हूं कि आप चाहते हैं कि उप-योग एक अलग परत में नेत्रहीन रूप से संभाला जाए, लेकिन आप जो कोशिश करना चाहते हैं वह GROUPING()
का उपयोग कर रहा है कॉलम पर कार्य करें। यह फ़ंक्शन 1 लौटाता है यदि यह GROUPING SETS
का हिस्सा है उप-योग, और 0 यदि यह एक नियमित स्तंभ है। http://technet.microsoft.com/en- us/लाइब्रेरी/ms178544(SQL.90).aspx
मैंने उस नमूना डेटा को शामिल किया जिसके साथ मैंने परीक्षण किया था। पहला WITH emp_test AS ()
हटाएं जब आप सेलेक्ट स्टेटमेंट का इस्तेमाल करते हैं।
मेरा परीक्षण डेटा:
WITH emp_test AS
(
SELECT 10 AS DEPTNO, 7782 AS EMPNO, 20000 AS sal
UNION ALL SELECT 10, 7839, 10000
UNION ALL SELECT 20, 7566, 5950
UNION ALL SELECT 20, 7788, 6000
)
उप-योग को अलग कॉलम पर प्राप्त करने के लिए उत्तर:
SELECT deptno, empno
, CASE
WHEN GROUPING(empNo) = 1 THEN null
ELSE SUM(sal)
END as sum_salary
, CASE
WHEN GROUPING(empno) = 1 THEN SUM(sal)
ELSE NULL
END AS SubTotal
FROM emp_test
GROUP BY GROUPING SETS (DeptNo, Empno), (DeptNo)