Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 MS SQL Промежуточные итоги с Заголовком  [new]
shekspeer
Member

Откуда: Таджикистан, Худжанд
Сообщений: 3
Доброго времени суток. Помогите пожалуйста с заголовком на запрос с промежуточными итогами.
Имеется запрос на MS SQL:
select 
case when LPur.Name is null and LPro.Name is null then 'ВСЕГО:'
	 when LPur.Name is null then 'ИТОГО: '+LPro.Name
	 else LPur.Name
	 end as Title
from Loan_Purpose LPur
left outer join Loan_Product LPro on LPro.ID=LPur.Product_ID
group by rollup (LPro.Name,LPur.Name)


Даёт следующее:
Title
Потребительский-на медицинское лечение
Потребительский-на обучение
ИТОГО: Потребительский
Производство продуктов питания
Производство строит материалов
ИТОГО: Производство
Услуги транспорта и перевозка грузов
Услуги швейного цеха
ИТОГО: Услуги
ВСЕГО:


Необходимо вставить заголовки перед каждым продуктом. То есть так:
Title
Потребительский
Потребительский на медицинское лечение
Потребительский на обучение
ИТОГО: Потребительский
Производство
Производство продуктов питания
Производство строит материалов
ИТОГО: Производство
Услуги
Услуги транспорта и перевозка грузов
Услуги швейного цеха
ИТОГО: Услуги
ВСЕГО:
17 окт 19, 16:55    [21996752]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Промежуточные итоги с Заголовком  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4383
GROUP BY GRUPING SETS позволит вам управлять подитогоми как захотите.
17 окт 19, 17:48    [21996809]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Промежуточные итоги с Заголовком  [new]
shekspeer
Member

Откуда: Таджикистан, Худжанд
Сообщений: 3
a_voronin,

под итоги у меня есть. мне нужны заголовки. Вот подробней с цифрами:

Title
Потребительский NULL
Потребительский на медицинское лечение 1
Потребительский на обучение 1
ИТОГО: Потребительский 2
Производство NULL
Производство продуктов питания 1
Производство строит материалов 2
ИТОГО: Производство 3
Услуги NULL
Услуги транспорта и перевозка грузов 3
Услуги швейного цеха 4
ИТОГО: Услуги 7
ВСЕГО: 12
18 окт 19, 07:51    [21997040]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Промежуточные итоги с Заголовком  [new]
PaulWist
Member

Откуда:
Сообщений: 2204
shekspeer
a_voronin,

под итоги у меня есть. мне нужны заголовки. Вот подробней с цифрами:

Title
Потребительский NULL
Потребительский на медицинское лечение 1
Потребительский на обучение 1
ИТОГО: Потребительский 2
Производство NULL
Производство продуктов питания 1
Производство строит материалов 2
ИТОГО: Производство 3
Услуги NULL
Услуги транспорта и перевозка грузов 3
Услуги швейного цеха 4
ИТОГО: Услуги 7
ВСЕГО: 12


Где-то так (если я правильно понял задачу):


create table #LPur (Product_ID int, Name varchar(50))

create table #LPro (ID int, Name varchar(50))

insert into #LPur (Product_ID, Name) values (1, 'Потребительский-на медицинское лечение'),(1, 'Потребительский-на обучение')
insert into #LPur (Product_ID, Name) values (2, 'Производство продуктов питания'),(2, 'Производство строит материалов')
insert into #LPur (Product_ID, Name) values (3, 'Услуги транспорта и перевозка грузов'),(3, 'Услуги швейного цеха')

insert into #LPro (ID, Name) values (1, 'Потребительский'),(2, 'Производство'), (3, 'Услуги')



;
with cte (ID, Name)
as
(
select ID, Name from #LPro
union all
select Product_ID, Name from #LPur
)

select 
case when LPur.Name is null and LPro.Name is null then 'ВСЕГО:'
	 when LPur.Name is null then 'ИТОГО: '+LPro.Name
	 else LPur.Name
	 end as Title
from cte LPur
left outer join #LPro LPro on LPro.ID=LPur.ID
group by rollup (LPro.Name,LPur.Name)

drop table #LPro

drop table #LPur
18 окт 19, 10:37    [21997167]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Промежуточные итоги с Заголовком  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4383
PaulWist,

Держите, но лучше изучите OLAP кубы дабы не страдать подобным .....

Даже матрица на репортинге может решить это.

SET LANGUAGE Russian; 

create table #LPur (Product_ID int, Name nvarchar(50))

create table #LPro (ID int, Name nvarchar(50))

insert into #LPur (Product_ID, Name) values (1, N'Потребительский-на медицинское лечение'),(1, N'Потребительский-на обучение')
insert into #LPur (Product_ID, Name) values (2, N'Производство продуктов питания'),(2, N'Производство строит материалов')
insert into #LPur (Product_ID, Name) values (3, N'Услуги транспорта и перевозка грузов'),(3, N'Услуги швейного цеха')

insert into #LPro (ID, Name) values (1, N'Потребительский'),(2, N'Производство'), (3, N'Услуги')



;
with cte (ID, Name)
as
(
select ID, Name from #LPro
union all
select Product_ID, Name from #LPur
),
cte2 AS (
select 
	LPro.Name AS name1, 
	LPur.Name AS name2,
	GROUPING(LPur.Name) AS gr,
	ROW_NUMBER() OVER (PARTITION BY GROUPING(LPur.Name), LPro.Name ORDER BY (SELECT NULL)) AS RN
from cte LPur
left outer join #LPro LPro on LPro.ID=LPur.ID
group by grouping sets ((LPro.Name,LPur.Name), (LPro.Name), (LPro.Name))
) 
SELECT 
	case gr WHEN 0 THEN name2
			WHEN 1 THEN 
				CASE RN WHEN 1 THEN N'ЗАГОЛОВОК:' + Name1
						WHEN 2 THEN N'ИТОГО:' + Name1
				END
	END
FROM cte2
ORDER BY 
	name1, 
	case gr WHEN 0 THEN 1
			WHEN 1 THEN 
				CASE RN WHEN 1 THEN 0
						WHEN 2 THEN 2
				END
	END, 
	name2

drop table #LPro

drop table #LPur
18 окт 19, 15:35    [21997529]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Промежуточные итоги с Заголовком  [new]
PaulWist
Member

Откуда:
Сообщений: 2204
2a_voronin

a_voronin
PaulWist,

Держите, но лучше изучите OLAP кубы дабы не страдать подобным .....

Даже матрица на репортинге может решить это.


1. Это не ко мне, а к ТСу. (shekspeer)

2. У ТСа ещё фигурирует строчка ВСЕГО. :)
18 окт 19, 15:46    [21997537]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Промежуточные итоги с Заголовком  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4383
PaulWist
2. У ТСа ещё фигурирует строчка ВСЕГО. :)


ТС доделает надеюсь

GROUPING(LPro.Name) = 1 AND GROUPING(LPur.Name) = 1
18 окт 19, 16:22    [21997573]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Промежуточные итоги с Заголовком  [new]
shekspeer
Member

Откуда: Таджикистан, Худжанд
Сообщений: 3
Спасибо всем решил задачу по вашим примерам.
19 окт 19, 11:56    [21997916]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить