2014-03-24 93 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 

我試圖返回MainEmail comma-delimited 2個不同的列表,如果他們在chkOutpatient和chkPartB = 「ON」。所以只有2個數據單元。 chkOutpatient的1個標題,其中包含逗號分隔的電子郵件列表,其中=「on」,以及chkPartB的1個標題相同。

所以對於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

在'SELECT STUFF(Csv,1,1,'')'中爲Csv獲取'無效列名' – user3191137

+0

對不起' – adrianm