2013-01-18 4 views
0

Можно создать дубликат:
SQL Query to get aggregated result in comma seperators along with group by column in SQL Serverзначения группы строк в разделенный запятыми список

У меня есть две следующие таблицы:

CarID | CarName | Color 
------+----------+---------- 
1  | Ford  | White 
2  | Mitsu | Black 
3  | Mitsu | Green 

OwnerID | OwnerName | CarID 
--------+-----------+------- 
1  | John  | 1 
1  | John  | 3 
2  | Mark  | 2 

И мне нужно следующее сообщение:

CarName | Owners 
--------+------------ 
Ford | John 
Mitsu | John, Mark 

Как это можно сделать?

+0

Вы спрашиваете, как это сделать в TSQL, который был задан много раз на этом сайте, или с помощью служб Reporting Services? – Pondlife

ответ

4

Это проще всего построить правильный набор данных, это на уровне базы данных, что-то вроде:

SELECT 
    c.CarName, 
    STUFF 
    (
     (
      SELECT ',' + owner 
      FROM Owner o 
      WHERE c.carID = o.carID 
      ORDER BY owner 
      FOR XML PATH('') 
     ), 1, 1, '' 
    ) AS owners 
FROM Car c 

Это будет возвращать одну строку для каждой комбинации автомобиль/цвета, так еще одна вещь, чтобы рассмотреть, хотите ли вы игнорировать цвет - то вам нужно сгруппировать по названию автомобиля:

SELECT 
    c.CarName, 
    STUFF 
    (
     (
      SELECT ',' + owner 
      FROM (select cd.carname, o.owner from Owner o inner join Car cd on o.carID = cd.carID) o 
      WHERE c.CarName = o.CarName 
      ORDER BY owner 
      FOR XML PATH('') 
     ), 1, 1, '' 
    ) AS owners 
FROM (select distinct carname from Car) c 

После того, как вы получили правильный набор данных, это просто вопрос создания простой таблицы для отображения результатов.

Смежные вопросы