Sql 如何将同一表的两个不同计数合并在一起?
我正在处理的表格是对一定数量问题的答案的记录。我想知道有多少人对问题中的提供商23 470477479481483说“是的,绝对是”。所以我试着数一数答案的总数和“是的,绝对”的答案。我可以单独做,但不能将它们合并到一个表中 一个查询是获取表SurveyAnswerFact中记录的总数Sql 如何将同一表的两个不同计数合并在一起?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我正在处理的表格是对一定数量问题的答案的记录。我想知道有多少人对问题中的提供商23 470477479481483说“是的,绝对是”。所以我试着数一数答案的总数和“是的,绝对”的答案。我可以单独做,但不能将它们合并到一个表中 一个查询是获取表SurveyAnswerFact中记录的总数 SELECT SurveyQuestionKey, count(1) FROM [WAREHOUSE].[dbo].[SurveyAnswerFact] WHERE ([ProviderKey] = 23) A
SELECT SurveyQuestionKey, count(1)
FROM [WAREHOUSE].[dbo].[SurveyAnswerFact]
WHERE ([ProviderKey] = 23)
AND ([SurveyQuestionKey] IN (470,477,479,481,483))
AND ([Response] = 'Yes, definitely')
AND ([ResponseDateKey] BETWEEN 20140601 AND 20150531)
GROUP BY SurveyQuestionKey
结果:
470 44
477 40
479 43
481 43
483 44
470 43
477 39
479 35
481 42
483 39
另一个查询是获得“是的,绝对”答案的计数
SELECT SurveyQuestionKey, count(1)
FROM [WAREHOUSE].[dbo].[SurveyAnswerFact]
WHERE (ProviderKey = 23)
AND (SurveyQuestionKey IN (470,477,479,481,483))
AND ([ResponseDateKey] BETWEEN 20140601 AND 20150531)
GROUP BY SurveyQuestionKey
结果:
470 44
477 40
479 43
481 43
483 44
470 43
477 39
479 35
481 42
483 39
我尝试使用SQL将它们连接在一起,但结果与第一个查询的结果相同。我的预期结果如下:
470 43 44
477 39 40
479 35 43
481 42 43
483 39 44
有谁能教我加入他们的正确方法吗?也许你的意思是
我所做的只是删除响应上的where子句,并将其添加到select和GROUPBY中
SELECT SurveyQuestionKey, Response, count(1)
FROM [WAREHOUSE].[dbo].[SurveyAnswerFact]
WHERE ([ProviderKey] = 23)
AND ([SurveyQuestionKey] IN (470,477,479,481,483))
AND ([ResponseDateKey] BETWEEN 20140601 AND 20150531)
GROUP BY SurveyQuestionKey, Response
--------------根据新信息更新---------
有几种方法可以做到这一点。使用案例陈述
SELECT SurveyQuestionKey, count(1) as Totalcount, sum(case when Response = 'Yes, definitely' then 1 else 0 end) as [Yes Def]
FROM [WAREHOUSE].[dbo].[SurveyAnswerFact]
WHERE ([ProviderKey] = 23)
AND ([SurveyQuestionKey] IN (470,477,479,481,483))
AND ([ResponseDateKey] BETWEEN 20140601 AND 20150531)
GROUP BY SurveyQuestionKey
另一种方法是按照您的建议加入表,但这会增加开销。(这将为每个查询使用一个公共表,以使联接更易于阅读。)
问题是什么?两种不同的计数是什么?提供一些样本数据和预期结果…我刚刚编辑了问题。我正在测试代码块是否有效:)。堆栈溢出的第一个问题。谢谢。编辑的问题更容易理解:PHi,我刚刚编辑了这个问题。你能再看一下吗?非常感谢。我得到一个“Msg 195,级别15,状态10,第1行'sum'不是可识别的内置函数名。”第一个错误。。。我在谷歌上搜索了一下,但我不明白……你能再帮我一次吗?天哪,我在“结束”之后加了一个“')”。它起作用了!谢谢!是的,我忘了关门)。。。另一种方法是使用pivot表,但我认为这太过分了,因为现在在我编辑它之前,你已经了解了我的想法!但它通知“列‘x.totals’在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。”您能帮我更正它吗?