SQL Server 2008 ssrs несколько записей в одну

Я читал другие подобные посты "несколько записей в одну", но либо не могу заставить их работать, либо они не относятся к тому, что я пытаюсь сделать.

Вот мои 3 таблицы. ТС, ТС, комментарии

  • vehicle столбцы: название транспортного средства и другая информация, связанная с транспортным средством, изготовитель транспортного средства, модель транспортного средства
  • vehicle_repair столбцы: Vehicle_name, vehicle_repair_type, vehicle_repair_num и т. д., и т. д.
  • comments столбцы: имя_транспорта, номер_репортажа_ремени, комментарий_детали

Как написана программа, если я пишу более 1 строки комментариев, она не объединяет их, она делает 1 запись для каждой строки, то есть:

comments Таблица:

vehicle_name                 vehicle_rpr_num             comments_detail
--------------------------------------------------------------------
150                           1         replaced hose
750                           1         replaced belt
750                           2         replaced fuel and also saw that the
750                           2         timing belt needs to be replaced
750                           2         as well

Я пытался использовать что-то вроде:

select 
    substring((select ' '+comments_detail AS 'data()' 
               from comments 
               for xml path('')), 3, 80) as 'comments_detail' 
from 
    comments

Я попытался добавить объединение и другие таблицы в подстроку, но затем все comments_details были разобраны, как будто затем объединяются 20 комментариев вместо 1 за раз.

Я бы предпочел начать с нуля и посмотреть, смогу ли я заставить его работать по-другому.

Моя проблема возникает, когда я пытаюсь связать 3 таблицы выше.

Я не знаю, как вставить другие необходимые мне поля из таблицы транспортных средств, т.е. vehicle_make, vehicle_model

Есть идеи? Я пишу свою конкатенацию совершенно неправильно? Я пытаюсь поместить это в хранимую процедуру, будет ли представление лучше?

2 ответа

CREATE TABLE tbl (vehicle_name INT,vehicle_rpr_num INT,comments_detail NVARCHAR(1000))

INSERT INTO tbl
VALUES
(150,1,'replaced hose'),
(750,1,'replaced belt'),
(750,2,'replaced fuel and also saw that the'),
(750,2,'timing belt needs to be replaced'),
(750,2,'as well')

SELECT DISTINCT t.vehicle_name, t.vehicle_rpr_num , STUFF(List.Comments, 1 ,2, '') AS Comments
FROM tbl t
       CROSS APPLY (
                    SELECT ' ' + comments_detail [text()]
                    FROM tbl
                    WHERE vehicle_name = t.vehicle_name
                    AND vehicle_rpr_num = t.vehicle_rpr_num
                    FOR XML PATH('')
                    )List(Comments)

Набор результатов

vehicle_name    vehicle_rpr_num   Comments
150                     1         eplaced hose
750                     1         eplaced belt
750                     2         eplaced fuel and also saw that the timing belt needs to be replaced as well
SELECT c1.vehicle_name,
       c1.vehicle_rpr_num,
       STUFF((SELECT ' ' + comments_detail
              FROM comments c2
              WHERE c2.vehicle_name = c1.vehicle_name
                    AND c2.vehicle_rpr_num = c1.vehicle_rpr_num
              FOR XML PATH(''), TYPE).value('.', 'varchar(max)'),
             1,1,'')
       AS comments
FROM comments c1
GROUP BY c1.vehicle_name, c1.vehicle_rpr_num;

SQLFiddle с примером comments данные.

Вы были на правильном пути, используя FOR XML PATH объединить комментарии. Есть много разных способов объединения, хорошая статья о плюсах и минусах каждого здесь. Я бы поместил это в определение представления, чтобы упростить соединение с другими таблицами.

Другие вопросы по тегам