2013-07-11 32 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