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 ║
╚════╩═══════╩═════════════════════════╩══════════════════════╝