2014-03-24 2 views
0

Этот запрос дает мне всю необходимую информацию, однако я хочу показать его по-разному, если это возможно. Текущий результат: http://i.imgur.com/BFKGFSx.jpgSQL Server: Изменение этого запроса

DECLARE @MainHospital varchar(50)='HOSPITAL 1'; 
SELECT MainEmail, chkOutpatient, chkPartB 
FROM SurveyPicList 
WHERE MainHospital = @MainHospital 
GROUP BY MainHospital, MainEmail, chkOutpatient, chkPartB 

Я пытаюсь вернуть 2 другой список из MainEmail comma-delimited если они = «на» в chkOutpatient и chkPartB. Таким образом, в результате получается всего 2 ячейки данных. 1 заголовка chkOutpatient со списком разделенных запятыми сообщений электронной почты, которые = «on», и 1 заголовок chkPartB с тем же.

Итак, для chkPartB, что-то вроде этого? http://i.imgur.com/RFlV24Q.jpg

SELECT DISTINCT ', ' + MainEmail AS chkPartB 
FROM SurveyPicList 
WHERE MainHospital = @MainHospital 
AND chkPartB = 'on' 

Пожалуйста, дайте мне знать, если мой вопрос не ясно, или если мне нужно дать больше информации.

+0

Используйте случай, когда ... – Mihai

+1

@Mihai Я не думаю, что дело будет работать как OP нужно перебирать результирующий набор и сцепить значение .. – SoulTrain

ответ

1
WITH Outpatients AS (
    SELECT DISTINCT MainEmail 
    FROM SurveyPicList 
    WHERE MainHospital = @MainHospital 
      AND chkOutpatient = 'on' 
) 
,OutpatientsRawCsv AS (
    SELECT (
     SELECT ',' + MainEmail 
     FROM Outpatients 
     FOR XML PATH('') 
    ) AS Csv 
) 
,PartBs AS (
    SELECT DISTINCT MainEmail 
    FROM SurveyPicList 
    WHERE MainHospital = @MainHospital 
      AND chkPartB = 'on' 
) 
,PartBRawCsv AS (
    SELECT (
     SELECT ',' + MainEmail 
     FROM PartBs 
     FOR XML PATH('') 
    ) AS Csv 
) 
SELECT STUFF(OutpatientsRawCsv.Csv, 1, 1, '') AS OutpatientsCsv 
     ,STUFF(PartBRawCsv.Csv, 1, 1, '') AS PartBCsv 
FROM OutpatientsRawCsv 
    CROSS JOIN PartBRawCsv 
+0

Хорошего ответ! Я собирался использовать рекурсивный CTE, но это гораздо более простое решение ... – SoulTrain

+0

Получение «недопустимого имени столбца» для Csv в 'SELECT STUFF (Csv, 1, 1, '')' – user3191137

+0

Извините за дополнительные ' – adrianm

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