Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
AVRob Member Откуда: Армения, Ереван Сообщений: 101 |
имеются таблица а со столбцами номер заказа 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 значения не повторялись а вместо значений goodsname и agentname выдавал сумму этих знаечний, т.е. результат иметь в виде:
|
||||||||||||||||||||||||||||||||||||||||||||||||||
11 фев 13, 21:49 [13911108] Ответить | Цитировать Сообщить модератору |
Cygapb-007 Member Откуда: Сообщений: 1677 |
;with sel as ( 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') ) select s.ordname,s.ordstate, stuff(( select '+'+a.goodsname from sel a where a.ordname=s.ordname and a.ordstate=s.ordstate group by a.goodsname order by a.goodsname for xml path(''),type ).value('.', 'nvarchar(max)'),1,1,'') goodsname, stuff(( select '+'+a.agentname from sel a where a.ordname=s.ordname and a.ordstate=s.ordstate group by a.agentname order by a.agentname for xml path(''),type ).value('.', 'nvarchar(max)'),1,1,'') agentname from sel s group by s.ordname,s.ordstate |
12 фев 13, 00:06 [13911438] Ответить | Цитировать Сообщить модератору |
AVRob Member Откуда: Армения, Ереван Сообщений: 101 |
Cygapb-007, Спасибо, все четко )) |
12 фев 13, 00:25 [13911486] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |