Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何将同一表的两个不同计数合并在一起?_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql 如何将同一表的两个不同计数合并在一起?

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

我正在处理的表格是对一定数量问题的答案的记录。我想知道有多少人对问题中的提供商23 470477479481483说“是的,绝对是”。所以我试着数一数答案的总数和“是的,绝对”的答案。我可以单独做,但不能将它们合并到一个表中

一个查询是获取表SurveyAnswerFact中记录的总数

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子句中。”您能帮我更正它吗?