powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос много ко многим
1 сообщений из 26, страница 2 из 2
Запрос много ко многим
    #39662468
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример подогнан под 10 единиц краски в каждом изделии:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
Create table plano  ( kodizd int,dataz date, Kol int);
insert into plano values (1,'20180601',5);
insert into plano values (1,'20180602',3);
insert into plano values (1,'20180603',1);
insert into plano values (2,'20180604',4);
insert into plano values (1,'20180604',5);

Create table sostav (spvx int, kodizd int, kodvx int, Kol int);
insert into sostav values (0,1,10,2);
insert into sostav values (0,1,20,1);
insert into sostav values (0,1,200,5);
insert into sostav values (0,10,200,2);
insert into sostav values (0,10,300,1);
insert into sostav values (0,20,200,1);
insert into sostav values (0,20,400,1);
insert into sostav values (0,2,10,5);

Create table izd ( Код int, izd nvarchar(20));
insert into izd values (1,N'Изделие-1');
insert into izd values (10,N'Деталь-1');
insert into izd values (20,N'Деталь-2');
insert into izd values (200,N'Краска');
insert into izd values (300,N'Болванка-1');
insert into izd values (400,N'Болванка-2');
insert into izd values (2,N'Изделие-2');

with T(dataz, spvx, kodizd, kodsb, kodvx, kol_izd, kol_sb, kol,lv) AS 
(SELECT dataz,spvx,s.kodizd,s.kodizd as kodsb,kodvx, sum(p.kol), sum(p.kol*s.kol),sum(p.kol*s.kol), 
 1 AS lv 
 FROM plano p 
 join sostav s on s.kodizd=p.kodizd
 where p.dataz between '20180601' and '20180630'
 Group by dataz,spvx,s.kodizd, kodvx
	UNION ALL 
 SELECT dataz,s.spvx, t.kodizd,s.kodizd as kodsb,s.kodvx, t.kol_izd, t.kol, s.kol*t.kol, 
	t.lv + 1 AS lv 
 FROM sostav s 
 inner join t on  s.kodizd = t.kodvx
) 
SELECT dataz,t.kodvx as Код, 
i3.izd ,
t.kol_izd,
i1.izd as vxod,
sum(t.kol) as Kol
/*
--Расшифровка по изделиям/сборкам/комплектющим
i1.izd as vxod,t.kol, --комплектющие
i2.izd as sborka,t.kol_sb, --сборки
i3.izd as Izdelie, t.kol_izd, --изделия из плана
t.lv */
FROM T 
inner join izd i1 on i1.Код=t.kodvx 
inner join izd i2 on i2.Код=t.kodsb
inner join izd i3 on i3.Код=t.kodizd
where i1.izd=N'Краска'
Group by dataz,t.kodvx, i1.izd,i3.izd,t.kol_izd



На мой взгляд результат верный:
datazКодizdkol_izdvxodKol2018-06-01200Изделие-15Краска50 2018-06-02200Изделие-13Краска30 2018-06-03200Изделие-11Краска10 2018-06-04200Изделие-15Краска50 2018-06-04200Изделие-24Краска40
...
Рейтинг: 0 / 0
1 сообщений из 26, страница 2 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос много ко многим
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]