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
объединить комментарии. Есть много разных способов объединения, хорошая статья о плюсах и минусах каждого здесь. Я бы поместил это в определение представления, чтобы упростить соединение с другими таблицами.