Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

एसक्यूएल सर्वर 2008 में स्तंभ और पंक्ति योग के साथ पिवट तालिका का उपयोग करना

इसके लिए विभिन्न दृष्टिकोण हो सकते हैं। आप पिवट के बाद सभी योगों की गणना कर सकते हैं, या आप पहले योग प्राप्त कर सकते हैं, फिर सभी परिणामों को पिवट कर सकते हैं। एक प्रकार का मध्य मैदान होना भी संभव है:एक प्रकार का योग प्राप्त करें (उदाहरण के लिए पंक्ति-वार वाले), धुरी, फिर दूसरे प्रकार का प्राप्त करें, हालांकि यह अतिदेय हो सकता है।

उल्लिखित दृष्टिकोणों में से पहला, पिवट के बाद सभी योग प्राप्त करना, बहुत ही सरल तरीके से किया जा सकता है, और नीचे दिए गए कार्यान्वयन में आपके लिए संभावित रूप से केवल एक ही चीज हो सकती है GROUP BY ROLLUP() :

SELECT
  [ ]      = ISNULL(environment_name, 'Total'),
  [Enviro] = SUM([Enviro]),
  [Requi]  = SUM([Requi]),
  [Dev]    = SUM([Dev]),
  [Tsc]    = SUM([Tsc]),
  [TD]     = SUM([TD]),
  [Unkn]   = SUM([Unkn]),
  Total    = SUM([Enviro] + [Requi] + [Dev] + [Tsc] + [TD] + [Unkn])
FROM (
  SELECT environment_name, root_cause
  FROM test1
) s
PIVOT (
  COUNT(root_cause)
  FOR root_cause IN ([Enviro], [Requi], [Dev], [Tsc], [TD], [Unkn])
) p
GROUP BY
  ROLLUP(environment_name)
;

मूल रूप से, GROUP BY ROLLUP() भाग कुल पंक्ति . उत्पन्न करता है तेरे लिए। समूहीकरण सबसे पहले environment_name . द्वारा किया जाता है , फिर ग्रैंड टोटल रो जोड़ दी जाती है।

ठीक इसके विपरीत करने के लिए, यानी पिवोटिंग से पहले योग प्राप्त करें, आप GROUP BY CUBE() को नियोजित कर सकते हैं इस तरह:

SELECT
  [ ]      = environment_name,
  [Enviro] = ISNULL([Enviro], 0),
  [Requi]  = ISNULL([Requi] , 0),
  [Dev]    = ISNULL([Dev]   , 0),
  [Tsc]    = ISNULL([Tsc]   , 0),
  [TD]     = ISNULL([TD]    , 0),
  [Unkn]   = ISNULL([Unkn]  , 0),
  Total    = ISNULL(Total   , 0)
FROM (
  SELECT
    environment_name = ISNULL(environment_name, 'Total'),
    root_cause       = ISNULL(root_cause,       'Total'),
    cnt              = COUNT(*)
  FROM test1
  WHERE root_cause IS NOT NULL
  GROUP BY
    CUBE(environment_name, root_cause)
) s
PIVOT (
  SUM(cnt)
  FOR root_cause IN ([Enviro], [Requi], [Dev], [Tsc], [TD], [Unkn], Total)
) p
;

SQL Fiddle पर दोनों विधियों का परीक्षण और उनके साथ खेला जा सकता है:

नोट। मैंने दोनों सुझावों में अविभाजित चरण को छोड़ दिया है क्योंकि एक स्तंभ को खोलना स्पष्ट रूप से बेमानी लग रहा था। यदि इसमें और भी कुछ है, तो किसी भी प्रश्न को समायोजित करना आसान होना चाहिए।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर क्वेरी स्टोर

  2. एक वर्चर डेटा प्रकार को डेटाटाइम डेटा प्रकार में बदलने के परिणामस्वरूप एक आउट-ऑफ-रेंज मान त्रुटि हुई

  3. एंटिटी फ्रेमवर्क 4 में अस्थायी तालिका या तालिका चर के उपयोग की सिफारिश करें। प्रदर्शन इकाई ढांचे को अपडेट करें

  4. SQL सर्वर 2008 के लिए लिंक्ड सर्वर कैसे बनाएं जहां हमारे पास 2000 और 2005 से डेटाबेस है

  5. क्रॉस डेटाबेस क्वेरी, फायदे और नुकसान को जोड़ती है