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

Откуда:
Сообщений: 1102
такое уже обсуждалось, но мне не понятно, прошу разъяснить. у меня такая же задача.

klient city manager price

Атлант Красноярск Иванов 5000
Рубин Казань Иванов 3000
Рубин Москва Иванов 2000
Рубин Питер Иванов 3000
Алекс Волгоград Иванов 1000
Атлант Красноярск Петров 1000

Как получить такую таблицу

Klient City manager price

атлант Красноярск Иванов 5000
Рубин Казань, Москва,Питер Иванов 8000
Алекс Волгоград Иванов 1000
Атлант Красноярск Петров 1000

запрос
select klient, city, manager, sum(Price)
from Table
where (manager in (@manager)) and (klient in (@klient))
group by klient, city, manager

ответ
select
T.klient,
stuff((select ','+TT.city from [Table] TT where TT.klient=T.klient and TT.manager=T.manager order by TT.city for xml path('')),1,1,'') city,
T.manager,
sum(T.Price) Price
from [Table] T
where (T.manager in (@manager)) and (T.klient in (@klient))
group by T.klient, T.manager;

мне не понятно откуда берутся T и TT. объясните плз.

примеры с вставкой тоже не понятны, подходят ли мне, тк данные я самостоятельно не вношу, они авто добавляются в бд. их только нужно отобразить.
use tempdb
go
drop table test
go
create table dbo.TEST ([Тип] INTEGER, [Имя] NVARCHAR(100), [Количество] INTEGER)
go
INSERT dbo.TEST VALUES(1, N'Молоко', 5)
INSERT dbo.TEST VALUES(1, N'Сметана', 6)
INSERT dbo.TEST VALUES(2, N'Гвозди', 44)
INSERT dbo.TEST VALUES(3, N'Машины', 1)


select [Тип] ,
(select
[Имя]+ ',' as 'data()'
from test t2
where t1.[Тип]=t2.[Тип]
for xml path('') ) as Name
,sum(количество)

from dbo.TEST t1
group by [Тип]

???
у меня такой запрос пока
DECLARE @RESULT VARCHAR (8000)
SET @RESULT = ''

SELECT @RESULT =
CASE
WHEN @RESULT = '' THEN city+klient+manager+price
ELSE @RESULT + ', ' + city+klient+manager+price
END
FROM
table1

SELECT @RESULT

но все данные выводятся в одну строку. как привести к виду, чтобы вместо нескольких строк с повторяющимися данными, была 1 строка ?? подскажите, плз
26 июл 12, 12:14    [12918759]     Ответить | Цитировать Сообщить модератору
 Re: конкатенация не всех строк в одну  [new]
seeerg_23
Member

Откуда:
Сообщений: 1102
кстати, у меня sql server 2008 R2
26 июл 12, 12:16    [12918773]     Ответить | Цитировать Сообщить модератору
 Re: конкатенация не всех строк в одну  [new]
iap
Member

Откуда: Москва
Сообщений: 47061
seeerg_23
но все данные выводятся в одну строку. как привести к виду, чтобы вместо нескольких строк с повторяющимися данными, была 1 строка ?? подскажите, плз
DISTINCT вначале или GROUP BY в конце
26 июл 12, 12:29    [12918851]     Ответить | Цитировать Сообщить модератору
 Re: конкатенация не всех строк в одну  [new]
seeerg_23
Member

Откуда:
Сообщений: 1102
аесли все эти поля из разных таблиц, то связку иннре джоин где указывать?? в запросе или в подзапросе ??
26 июл 12, 14:26    [12919753]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить