2013-07-11 77 views
0

我有以下查詢:SQL兩行合併爲一個

SELECT qn.ID, 
     qn.Title, 
     qt.Description, 
     l.DisplayName AS Language, 
     COUNT(q.ID) AS QuestionCount 
    FROM dbo.Questionnaires AS qn 
    JOIN dbo.QuestionnaireText AS qt ON qn.ID = qt.QuestionnaireID 
    JOIN dbo.Questions AS q ON q.QuestionnaireID = qn.ID 
    JOIN dbo.Languages AS l ON l.ID = qt.LanguageID 
WHERE (qn.QuestionnaireTypeID = (SELECT ID 
            FROM QuestionnaireTypes 
            WHERE Value = 'Quiz')) 
GROUP BY qn.ID, qn.Title, l.DisplayName, qt.Description 

其如下表輸出:

36132A45-F09C-4EB5-9BD2-34A227EC03B9  Test NULL English 1 
36132A45-F09C-4EB5-9BD2-34A227EC03B9  Test NULL Spanish 1 
24395BC7-A890-4514-AB35-7614E226B2A5  Quiz NULL English 1 
24395BC7-A890-4514-AB35-7614E226B2A5  Quiz NULL Spanish 1 
03B13E61-6D7F-4597-8BB6-83889C7BFE29 G Quiz NULL English 6 
03B13E61-6D7F-4597-8BB6-83889C7BFE29 G Quiz NULL Spanish 6 

我需要的是查詢到了把以下內容:

36132A45-F09C-4EB5-9BD2-34A227EC03B9  Test NULL English, Spanish 1 
24395BC7-A890-4514-AB35-7614E226B2A5  Quiz NULL English, Spanish 1 
03B13E61-6D7F-4597-8BB6-83889C7BFE29 G Quiz NULL English, Spanish 6 

我現在處於虧損狀態。有什麼建議麼?

+0

有多少種語言? –

+0

告訴我,試圖將多個值合併到單個字段中是SQL中的反模式。特別是如果它試圖在表示層中涉及數據層的機制。 – MatBailie

+0

將值合併到單個字段僅適用於ssrs報告。我們的應用程序僅支持兩種語言,即英語和西班牙語。 '測驗'有相同的ID,但有英文和西班牙文版本。該報告將顯示報告名稱,描述,所有語言都不包含在內的語言以及測驗的問題計數。 –

回答

1

這是你如何與For Xml做到這一點:

SELECT qn.ID, 
     qn.Title, 
     qt.Description, 
     STUFF(
      ISNULL((SELECT ', ' + l.DisplayName 
        FROM dbo.Languages AS l 
        WHERE l.ID = qt.LanguageID 
        GROUP BY l.DisplayName 
        FOR XML PATH (''), TYPE).value('.','VARCHAR(max)'), ''), 1, 2, '') 
      as Languages, 
     COUNT(q.ID) AS QuestionCount 
FROM dbo.Questionnaires AS qn 
    JOIN dbo.QuestionnaireText AS qt ON qn.ID = qt.QuestionnaireID 
    JOIN dbo.Questions AS q ON q.QuestionnaireID = qn.ID 
    JOIN dbo.QuestionnaireTypes AS qtypes ON qtypes.Id = qn.QuestionnaireTypeID 
WHERE qtypes.Value = 'Quiz' 
GROUP BY qn.ID, qn.Title, l.DisplayName, qt.Description 

請注意,我也感動了WHERE標準到另一個JOIN

+0

這不會改變我的結果集。我應該改變一些東西嗎? –

+0

@JenniferWeinmanDouglas - 如果這不起作用,可能是因爲COUNT的附加聚合。嘗試將整個查詢(減去語言)移動到子查詢中,然後將語言內容添加回到外層。 – user2480596