имеются таблица а со столбцами номер заказа orderid и название заказа
таблица goods со столбцами goods_id и goodsname
таблица agents со столбцами agents_id и agentname
с каждым заказом указаны товары и агенты (goodsLink и agentslink таблицы соответствий)
делается выборка по разным условиям.
В этом примере
declare @a table (orderid int,ordname nvarchar(50),ordstate nvarchar(50))
INSERT INTO @a VALUES
(1,'order 1','done'),(2,'order 2','done'),(3,'this is order 3','in progress'),
(4,'order 4','in progress'),(5,'order for repair','done')
declare @goodsLink table (order_id int,goodsid int)
INSERT INTO @goodsLink VALUES
(1,1),(1,2),(1,3),
(2,5),
(3,2),(3,3),(3,5),
(4,1),(4,5),
(5,2),(5,3)
declare @goods table (goods_id int,goodsname nvarchar(50))
INSERT INTO @goods VALUES
(1,'goods1'),(2,'goods 2'),(3,'this is goods 3'),
(4,'goods4'),(5,'goods 5')
declare @agentsLink table (order_id int,agentid int)
INSERT INTO @agentsLink VALUES
(1,1),(1,2),
(2,3),
(3,2),(3,3),(3,4),
(4,1),(4,3),
(5,2),(5,3)
declare @agents table (agent_id int,agentname nvarchar(50))
INSERT INTO @agents VALUES
(1,'Smith'),(2,'Adams'),(3,'Johnson'),
(4,'Paterson')
select a.ordname,a.ordstate,c.goodsname,e.agentname
from @a a
Left Outer Join @goodsLink b on b.order_id=a.orderid
Left outer Join @goods c on c.goods_id=b.goodsid
Left Outer Join @agentsLink d on d.order_id=a.orderid
Left outer Join @agents e on e.agent_id=d.agentid
where a.orderid>3
--where (e.agentname like 'Adams%')and (ordstate='done')
(условия выборки могут быть по разным столбцам)
-----------------------------
в результате имеем
ordname | ordstate | goodsname | agentname | order 4 | in progress | goods1 | Smith | order 4 | in progress | goods1 | Johnson | order 4 | in progress | goods 5 | Smith | order 4 | in progress | goods 5 | Johnson | order for repair | done | goods 2 | Adams | order for repair | done | goods 2 | Johnson | order for repair | done | this is goods 3 | Adams | order for repair | done | this is goods 3 | Johnson |
|
Как можно сделать так, чтоб в столбце ordname значения не повторялись
а вместо значений goodsname и agentname выдавал сумму этих знаечний, т.е.
результат иметь в виде:
ordname | ordstate | goodsname | agentname | order 4 | in progress | goods1+goods 5 | Smith+Johnson | order for repair | done | goods 2+this is goods 3 | Adams+Johnson |
|