Статьи

Группировка по группировке

Вступление

В этой статье мы пытаемся обсудить особую функцию T-SQL под названием « Наборы по группам», которая представлена ​​в Microsoft SQL Server 2008. Она используется для указания нескольких группировок в одном запросе. Чтобы понять это, давайте возьмем пример.

Что мы хотим сделать

В этом сценарии у нас есть такая таблица:

EmpName
EMPSTATE
ОТДЕЛ
ЗАРПЛАТА

Tripura

ЭТО

2000

Чандан Банерджи

Западная Бенгалия

ЭТО

4000

Раджив Куммар

Tripura

ЭТО

2000

Вивек Сингх

Западная Бенгалия

Счета

5000

Даршит Тривари

Западная Бенгалия

Счета

4000

Мы хотим вывод, как это:

EmpName
EMPSTATE
ОТДЕЛ
ЗАРПЛАТА

Tripura

ЭТО

2000

Чандан Банерджи

Западная Бенгалия

ЭТО

4000

Раджив Куммар

Tripura

ЭТО

2000

Вивек Сингх

Западная Бенгалия

Счета

5000

Даршит Тривари

Западная Бенгалия

Счета

4000
Западная Бенгалия
Счета
9000
Tripura
ЭТО
4000
Западная Бенгалия
ЭТО
4000
Счета
9000
ЭТО
8000

Надеюсь, вы понимаете сценарий.

Как мы можем это реализовать

Шаг 1 [Создание базовой таблицы]

 IF OBJECT_ID(N'[dbo].[tbl_STATEWISEEMPSAL]', N'U')IS NOT NULL
  BEGIN
  DROP TABLE [dbo].[tbl_STATEWISEEMPSAL];
  END
GO
CREATE TABLE [dbo].[tbl_STATEWISEEMPSAL]
  (
  EMPNAME  VARCHAR(50)  NOT NULL,
   EMPSTATE  VARCHAR(50)  NOT NULL,
   DEPARTMENT  VARCHAR(50)  NOT NULL,
   SALARY  DECIMAL(18,2) NOT NULL
  );
GO

Шаг 2 [Вставка записей в базовую таблицу]

 INSERT INTO [dbo].[tbl_STATEWISEEMPSAL]
  (EMPNAME, EMPSTATE, DEPARTMENT, SALARY)
VALUES ('Joydeep Das', 'Tripura', 'IT', 2000),
  ('Chandan Banerjee', 'West Bengal', 'IT', 4000),
   ('Rajeev Kumar', 'Tripura', 'IT', 2000),
   ('Vivek Singh', 'West Bengal', 'Accounts', 5000),
   ('Darshir Tiwari', 'West Bengal', 'Accounts', 4000);
GO

Шаг 3 [Использование оператора UNION ALL]

 SELECT EMPNAME, EMPSTATE, DEPARTMENT, SUM(SALARY) SALARY
FROM  [dbo].[tbl_STATEWISEEMPSAL]
GROUP BY EMPNAME, EMPSTATE, DEPARTMENT
UNION ALL
SELECT NULL EMPNAME, EMPSTATE, DEPARTMENT, SUM(SALARY) SALARY
FROM  [dbo].[tbl_STATEWISEEMPSAL]
GROUP BY EMPSTATE, DEPARTMENT
UNION ALL
SELECT NULL EMPNAME, NULL EMPSTATE, DEPARTMENT, SUM(SALARY) SALARY
FROM  [dbo].[tbl_STATEWISEEMPSAL]
GROUP BY DEPARTMENT;

Шаг 4 [Использование Microsoft SQL 2008 Group By Grouping Set]

 SELECT EMPNAME, EMPSTATE, DEPARTMENT, SUM(SALARY) SALARY
FROM  [dbo].[tbl_STATEWISEEMPSAL]
GROUP BY GROUPING SETS ((EMPNAME, EMPSTATE, DEPARTMENT),(EMPSTATE),(DEPARTMENT))
ORDER BY 1 DESC;

Надеюсь, вам понравится.