2016-09-21 8 views
0

У нас работает SQL Server 2005. У меня возникают проблемы с откатом столбцов.Как сворачивать столбцы

create table group_roll 
(
    id_name int, 
    full_name varchar(50), 
    qty int 
) 
go 

insert into group_roll (id_name, full_name, qty) 
values (1, 'john smith', 10) 

insert into group_roll (id_name, full_name, qty) 
values (1, 'john smith', 40) 

insert into group_roll (id_name, full_name, qty) 
values (1, 'jane smith', 50) 

insert into group_roll (id_name, full_name, qty) 
values (1, 'dean smith', 10) 

insert into group_roll (id_name, full_name, qty) 
values (2, 'frank white', 5) 

insert into group_roll (id_name, full_name, qty) 
values (2, 'Ann white', 12) 

insert into group_roll (id_name, full_name, qty) 
values (1, 'john smith', 8) 

insert into group_roll (id_name, full_name, qty) 
values (2, 'frank white', 10) 

insert into group_roll (id_name, full_name, qty) 
values (3, 'perry mason', 10) 
go 

select * 
from group_roll 
order by id_name 

Выход:

id_name  full_name   qty 
    -------------------------------------- 
    1   john smith   10 
    1   john smith   40 
    1   jane smith   50 
    1   dean smith   10 
    1   john smith   8 
    2   frank white   10 
    2   frank white   5 
    2   Ann white   12 
    3   perry mason   10 

Я хочу, чтобы результат можно свертывать в нечто вроде этого

id_name name         qty 
    ---------------------------------------------------- 
    1  john smith, jane smith, dean smith  118 
    2  frank white, ann white     27 
    3  perry mason        10 

Как вы код Rollup имена и Qty как показано на рисунке?

Спасибо,

Сейед

ответ

1

Попробуйте это: Это даст вам то, что вы ожидали, но на выходе вы предоставили, если я не ошибаюсь, третья строка держит неправильное значение:

SELECT id_name, 
STUFF((SELECT DISTINCT ', ' + full_name FROM group_roll A 
    WHERE A.id_name=b.id_name FOR XML PATH('')),1,1,'') As name, 
SUM(qty) qty    
FROM group_roll b 
GROUP BY id_name 
+0

Это сработало. Большое спасибо. Вы правы в третьей строке, это было результатом плохой копии и вставки. Он должен показать «perry mason». – SeyedG

+0

Как помечать это сообщение как «Решено» или «Закрыто» или что-то в этом роде? – SeyedG