sql >> Databasteknik >  >> RDS >> Sqlserver

Gruppera uppsättningar:visa delsummor i en annan specifik kolumn?

Jag håller med Jamie att du kanske vill att delsummorna visuellt hanteras i ett annat lager, men det du kanske vill prova är att använda GROUPING() funktion på kolumnen. Denna funktion returnerar 1 om den är en del av GROUPING SETS delsummor och 0 om det är en vanlig kolumn. http://technet.microsoft.com/en- us/library/ms178544(SQL.90).aspx

Jag inkluderade provdata som jag testade med. Ta bort den första WITH emp_test AS () när du använder select-satsen.

Mina testdata:

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
)

Svara för att få delsummor i separat kolumn:

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)


  1. Hur man skapar en primär nyckel i SQL Server (T-SQL-exempel)

  2. PostgreSQL - Returnera radinnehållet när UPPDATERING misslyckas

  3. Infoga dubbla citattecken i SQL-utdata

  4. Hur hanterar man ett valfritt värde som returneras av en fråga med postgres-lådan?