2013-08-01 2 views
0

Я использую следующий запрос для извлечения назначения данных:Соединить строки для одного столбца SQL

SELECT app.subject, AL.locationName 
FROM FilteredAppointment app 
INNER JOIN appointmentlocation AL ON app.activityid = AL.appointment 
WHERE app.scheduledstart='2013-07-06 15:00:00.000' 

Выхода следующего с 2-мя ряды (то же назначения с двумя разными местами):

enter image description here

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

Column1: (MZN; ОТВ) * ...
Column2: Room1, Room2

Благодаря

+0

он не дублирует на этот вопрос, как мне нужно, чтобы заполнить значение столбцов из разных строк и то же со lumn. Сообщение, которое вы предлагаете, имеет значение из других столбцов. – Azeem

ответ

5

что вам нужно, SQL Join and concatenate rows, есть много вопросов об этом. Там нет простой способ сделать это в SQL Server, но здесь некоторые приемы:

Объединить с помощью выбрать для XML

select 
    app.subject, 
    stuff(
     (
      select ', ' + AL.locationName 
      from appointmentlocation as AL 
      where AL.appointment = app.activityid 
      for xml path(''), type 
     ).value('.', 'nvarchar(max)') 
    , 1, 2, '') 
from FilteredAppointment as app 
where app.scheduledstart='2013-07-06 15:00:00.000' 

если у вас есть только одна запись из FilteredAppointment конкатенировать, вы можете использовать слипание в переменную:

declare @locations nvarchar(max), @activityid int 

select @activityid = ??? 

select @locations = isnull(@locations + ', ', '') + AL.locationName 
from appointmentlocation as AL 
where AL.appointment = @activityid 

print @locations 
+0

Большое спасибо, это сработало. – Azeem

0
SELECT app.subject, GROUP_CONCAT(AL.locationName, ', ') AS LocationName 
FROM FilteredAppointment app 
INNER JOIN appointmentlocation AL ON app.activityid = AL.appointment 
WHERE app.scheduledstart='2013-07-06 15:00:00.000' 
GROUP BY app.subject 

Непроверено

+0

GROUP_CONCAT хорош, но зависит от MySQL. Сообщение помечено MS SQL. – jpw

+0

А я плохо, не знал, что это было специфично для mysql! – Dale

+0

@jpw: OP хочет в SQL Server. – Romesh

0

Я не могу проверить это прямо сейчас, но я думаю, что это может сделать работу

select subject, 
     group_concat(name separator ',') Newcolumn 
    from table 
group by subject 
+0

это для MySQL не для SQL Server –

+0

Да, я этого не знал, но я дал обходное решение для msSQL в сообщении @Dale – Marc

2

Этот пример поможет вам .. или подождать, пока я не закрою вас

USE app.subject, 
    SELECT  AL.locationName AS [Loc], 
       STUFF(( SELECT ',' + SUB.Name AS [text()] 
          – Add a comma (,) before each value 
          FROM appointmentlocation AL 
          WHERE 
          app.activityid = AL.appointment 

          FOR XML PATH('') – Select it as XML 
          ), 1, 1, '') 
          – This is done to remove the first character (,) 
          – from the result 
       AS [Sub Categories] 
    FROM FilteredAppointment app 
+0

спасибо но я думаю, что ответ, данный Романом Пекаром, работает ... – Azeem

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