Вступление
В этой статье мы пытаемся обсудить особую функцию 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;
Надеюсь, вам понравится.