SQL水平排列垂直信息

SQL水平排列垂直信息,sql,tsql,sql-server-2012,Sql,Tsql,Sql Server 2012,伙计们。我遇到了一个非常独特的情况,但我相信你们可能也会遇到同样的情况 我有四张桌子。(它们代表填写调查表的用户) 仅此而已。现在我的客户希望看到如下的调查结果 SurveyFIllerID Name Did you like our event? Will you come again? 1 Ahmed yes No 我不知道该怎么做,因为在我的表格中,我得到了垂直排列的数据, 但是,输出希望

伙计们。我遇到了一个非常独特的情况,但我相信你们可能也会遇到同样的情况

我有四张桌子。(它们代表填写调查表的用户)

仅此而已。现在我的客户希望看到如下的调查结果

SurveyFIllerID  Name        Did you like our event?  Will you come again?
 1              Ahmed       yes                      No
我不知道该怎么做,因为在我的表格中,我得到了垂直排列的数据, 但是,输出希望数据是水平的


请帮助。

这是一个动态查询,即使用户没有回答问题,它也会显示结果列表中的所有可用问题

DECLARE @colList AS NVARCHAR(MAX), @sqlStatement AS NVARCHAR(MAX)

SELECT @colList = STUFF((SELECT DISTINCT ',' + QUOTENAME(Question) 
                    FROM Questions
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') ,1,1,'')


SET @sqlStatement = 
            'SELECT ID,Name, ' + @colList + ' 
             FROM 
             (
                SELECT  a.ID, 
                        a.Name,
                        b.Question,
                        d.Answers
                FROM    SurveyFiller a
                        CROSS JOIN Questions b
                        LEFT JOIN QuestionAnswerMatrix c
                            ON  a.ID = c.SurveyFillerId AND
                                b.ID = c.QuestionId
                        LEFT JOIN Answers d
                            ON  c.AnswerId = d.ID
                WHERE   a.ID = 1
             ) dta
             pivot 
             (
                MAX(Answers)
                FOR Question IN (' + @colList + ')
             ) pvt'

EXECUTE(@sqlStatement)
输出(类似于此)


这是一个动态查询,即使用户没有回答问题,它也会显示结果列表中可用的所有问题

DECLARE @colList AS NVARCHAR(MAX), @sqlStatement AS NVARCHAR(MAX)

SELECT @colList = STUFF((SELECT DISTINCT ',' + QUOTENAME(Question) 
                    FROM Questions
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') ,1,1,'')


SET @sqlStatement = 
            'SELECT ID,Name, ' + @colList + ' 
             FROM 
             (
                SELECT  a.ID, 
                        a.Name,
                        b.Question,
                        d.Answers
                FROM    SurveyFiller a
                        CROSS JOIN Questions b
                        LEFT JOIN QuestionAnswerMatrix c
                            ON  a.ID = c.SurveyFillerId AND
                                b.ID = c.QuestionId
                        LEFT JOIN Answers d
                            ON  c.AnswerId = d.ID
                WHERE   a.ID = 1
             ) dta
             pivot 
             (
                MAX(Answers)
                FOR Question IN (' + @colList + ')
             ) pvt'

EXECUTE(@sqlStatement)
输出(类似于此)


如果你有10个长问题怎么办?你还想垂直显示吗?还有一件事,你想列出所有的问题,即使用户没有回答?嗯,是的。这就是我创建这样一个结构的原因。可以添加新问题和新答案。结果应该“水平”展开,嗯,好的。还有一件事,你想要的结果与
答案
中的
问题回答矩阵
的值不匹配。哦,是的,JW,这只是我在匆忙中键入的一个错误。让我看看你的建议如果你有10个长问题怎么办?你还想垂直显示吗?还有一件事,你想列出所有的问题,即使用户没有回答?嗯,是的。这就是我创建这样一个结构的原因。可以添加新问题和新答案。结果应该“水平”展开,嗯,好的。还有一件事,你想要的结果与
答案
中的
问题回答矩阵
的值不匹配。哦,是的,JW,这只是我在匆忙中键入的一个错误。让我看看你的建议如果你删除
其中a.ID=1
它将显示表
SurveyFiller
.JW中的所有用户,我不能夸大你的帮助意味着什么。谢谢它就像一个符咒。我希望有一天我也能独自解决这些问题。保持幸福。如果你删除
其中a.ID=1
它将显示表中的所有用户
SurveyFiller
.JW,我不能夸大你的帮助意味着什么。谢谢它就像一个符咒。我希望有一天我也能独自解决这些问题。保持幸福。
╔════╦═══════╦═════════════════════════╦══════════════════════╗
║ ID ║ NAME  ║ DID YOU LIKE OUR EVENT? ║ WILL YOU COME AGAIN? ║
╠════╬═══════╬═════════════════════════╬══════════════════════╣
║  1 ║ AHMED ║ bla bla                 ║ Yes                  ║
╚════╩═══════╩═════════════════════════╩══════════════════════╝