如何为不匹配的SQL Server案例返回0之和

如何为不匹配的SQL Server案例返回0之和,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个查询,它将销售额汇总到案例存储桶中,效果很好,只是我需要它为没有销售额的存储桶返回0 这是针对MS SQL Server 2016的,我搜索并发现了一些建议使用Coalesce的类似问题,但我不知道如何将其应用到我的查询中 表数据如下所示: 调查ID、项目、调查周期、季度销售额、平均基准价格2 65374120792018-12-01,4301805 7064113662018-12-01,9584390 等 (很抱歉,我不知道如何更好地格式化此文件) 通过上面的查询,我得到: 量程qt

我有一个查询,它将销售额汇总到案例存储桶中,效果很好,只是我需要它为没有销售额的存储桶返回0

这是针对MS SQL Server 2016的,我搜索并发现了一些建议使用Coalesce的类似问题,但我不知道如何将其应用到我的查询中

表数据如下所示:
调查ID、项目、调查周期、季度销售额、平均基准价格2
65374120792018-12-01,4301805
7064113662018-12-01,9584390

(很抱歉,我不知道如何更好地格式化此文件) 通过上面的查询,我得到:
量程qtrsold测量值
250000美元-27499812018美元
275000美元-299999812018美元
300000美元-3249995912018美元
325000美元-3499992212018美元
350000美元-374999 139 12018美元
375000美元-399998212018美元
400000美元-424999 103 12018美元
425000美元-449999212018美元
450000美元-47499914212018美元
475000美元-4999914412018美元
500000美元-599999 314 12018美元
600000美元-699996412018美元
700000美元-7999998012018美元
800000美元-8999991812018美元
900000美元及以上612018

我想要:
量程qtrsold测量值
低于200000美元12018
200000-224000012018美元
225000美元-249999.01218美元

250000美元-27499812018美元
275000美元-299999812018美元
300000美元-3249995912018美元
325000美元-3499992212018美元
350000美元-374999 139 12018美元
375000美元-399998212018美元
400000美元-424999 103 12018美元
425000美元-449999212018美元
450000美元-47499914212018美元
475000美元-4999914412018美元
500000美元-599999 314 12018美元
600000美元-699996412018美元
700000美元-7999998012018美元
800000美元-8999991812018美元
900000美元及以上612018


非常感谢您的帮助。

您需要单独生成范围,然后使用
左连接
导入数据。目前尚不清楚这些列来自何处,因此以下是一个猜测:

select (datename(quarter, s.surveyperiod) + datename(year, s.surveyperiod)) as surveydate,
       v.range,
       coalesce(sum(?.quartersold), 0) as qtrsold
from (values ('Less than $200,000', 0 200000),
             ('$200,000 - $224,000', 0, 225,000),
             ('$225,000 - $249,999', 225000, 250000),
             . . .
     ) v(range, lo, hi) left join
     surveys s 
     on s. averagebaseprice2 >= v.lo and s.averagebaseprice2 < v.hi left join
     projects p
     on s.projid = p.projid
where s.surveyperiod >= '2018-01-01' and s.surveyperiod < '2019-01-01'
group by (datename(quarter, s.surveyperiod) + datename(year, s.surveyperiod)) as surveydate,
         v.range  ;
选择(日期名称(季度,s.surveyperiod)+日期名称(年份,s.surveyperiod))作为surveydate,
v、 范围,
合并(总和(?四分之一),0)为qtrsold
从(价值('低于$200000',200000),
('$200,000 - $224,000', 0, 225,000),
('$225,000 - $249,999', 225000, 250000),
. . .
)v(范围,低,高)左连接
调查
在s。averagebaseprice2>=v.lo和s.averagebaseprice2='2018-01-01'和s.surveyperiod<'2019-01-01'
按(日期名称(季度,s.surveyperiod)+日期名称(年份,s.surveyperiod))作为调查日期分组,
v、 射程;

您需要单独生成范围,然后使用
左连接
引入数据。目前尚不清楚这些列来自何处,因此以下是一个猜测:

select (datename(quarter, s.surveyperiod) + datename(year, s.surveyperiod)) as surveydate,
       v.range,
       coalesce(sum(?.quartersold), 0) as qtrsold
from (values ('Less than $200,000', 0 200000),
             ('$200,000 - $224,000', 0, 225,000),
             ('$225,000 - $249,999', 225000, 250000),
             . . .
     ) v(range, lo, hi) left join
     surveys s 
     on s. averagebaseprice2 >= v.lo and s.averagebaseprice2 < v.hi left join
     projects p
     on s.projid = p.projid
where s.surveyperiod >= '2018-01-01' and s.surveyperiod < '2019-01-01'
group by (datename(quarter, s.surveyperiod) + datename(year, s.surveyperiod)) as surveydate,
         v.range  ;
选择(日期名称(季度,s.surveyperiod)+日期名称(年份,s.surveyperiod))作为surveydate,
v、 范围,
合并(总和(?四分之一),0)为qtrsold
从(价值('低于$200000',200000),
('$200,000 - $224,000', 0, 225,000),
('$225,000 - $249,999', 225000, 250000),
. . .
)v(范围,低,高)左连接
调查
在s。averagebaseprice2>=v.lo和s.averagebaseprice2='2018-01-01'和s.surveyperiod<'2019-01-01'
按(日期名称(季度,s.surveyperiod)+日期名称(年份,s.surveyperiod))作为调查日期分组,
v、 射程;

您能否提供有关这两个表中数据的更多信息?我想这可以通过转换为外部联接或将一些虚拟数据行合并到混合中来解决。感谢Chad,我只是添加了一些示例数据=]由于联接,没有任何丢失的记录。我从查询中删除了联接,这样我就可以按不同表中的区域限制结果。你能提供更多关于这两个表中数据的信息吗?我想这可以通过转换为外部联接或将一些虚拟数据行合并到混合中来解决。感谢Chad,我只是添加了一些示例数据=]由于联接,没有任何丢失的记录。我从查询中删除了联接,这只是为了让我可以根据不同的表中的区域限制结果。非常感谢戈登,我感谢你的时间。我对数值部分有点困惑,第二行应该是200000,225000吗?另外,很抱歉,我不太擅长编写查询,我忘了添加s。在quartersoldi面前,我在关键字“as”附近得到了一个错误的语法,选择(datename(quarter,s.surveyperiod)+datename(year,s.surveyperiod))作为surveydate,v.range,coalesce(sum(s.QuarterSeld),0)作为qtrsold,从(值('小于$200000',0',200000-$224000',200000,225000),('225000-$249999',225000,250000))开始)v(范围,lo,hi)在s.AverageBasePrice上的左联合调查2>=v.lo和s.AverageBasePrice 2='2018-01-01'和s.surveyperiod<'2019-01-01'分组依据(日期名称(季度,s.surveyperiod)+日期名称(年份,s.surveyperiod))作为调查日期,v.Range谢谢,我能够让它与我的数据一起工作,非常感谢!非常感谢戈登,谢谢你抽出时间。我对数值部分有点困惑,第二行应该是200000,225000吗?另外,很抱歉,我不太擅长编写查询,我忘了添加s。在quartersoldi面前,我在keywor附近发现了一个不正确的语法