在SQL计数后计算结果

时间:2017-12-13 15:49:00

标签: sql sql-server

我有下一个查询计算我的具体值,查询结果并不完美,我看到了几个" MIR_id"具有相同ID但却看不到它们的总数(我也想要) 我尝试添加更多Count" With"但它混淆了一切。 任何想法我该如何解决?

SELECT distinct 
request_id

      ,(substring(VwDurationIndicator.RequestDetails,5,6)) as Mir_ID
      ,request_type



      ,count(vpo_number) as Number_of_source

  FROM vortex_hvc.dbo.VwDurationIndicator

 left join vw_public_request_material_location_mir on (substring(VwDurationIndicator.RequestDetails,5,6)) like vw_public_request_material_location_mir.material_request_id

     where  ( DateDiff(hh,CreatedTime, getdate()) < 6)

   and request_type like 'MIR' AND SITE LIKE 'HVC' 

     GROUP BY VPO_NUMBER,(substring(VwDurationIndicator.RequestDetails,5,6)),request_id,CreatedTime,AssignTime,ClosedTime,request_type,Product,site

查询结果:

request_id  Mir_ID  Number_of_source
152466  334974  0
152467  334979  1
152472  334985  0
152473  334986  0
152475  334994  0
152534  335046  0
152540  335064  1
152540  335064  3
152540  335064  4
152543  335071  0
152546  335075  1
152549  335078  1
152549  335078  2
152549  335078  3
152549  335078  4
152549  335078  6

1 个答案:

答案 0 :(得分:0)

select distinct几乎不需要

group by。您应该仅通过select中的未聚合列聚合(通常)。所以:

select request_id,
       substring(di.RequestDetails, 5, 6)) as Mir_ID
       request_type,
       count(vpo_number) as Number_of_source
from vortex_hvc.dbo.VwDurationIndicator di left join 
     vw_public_request_material_location_mir rml
     on substring(di.RequestDetails, 5, 6)) = rml.material_request_id
where DateDiff(hour, CreatedTime, getdate()) < 6 and
      request_type = 'MIR' and SITE = 'HVC' 
group by request_id,
         substring(di.RequestDetails, 5, 6)) as Mir_ID
         request_type;

注意:

  • 表别名使查询更易于编写和阅读。
  • 您应该对所有列名称进行限定,因此很明显列的来源。
  • group by只有非聚合列。
  • select distinct不再需要。
  • 使用带有它们的功能(“小时”代替“hh”)时拼出日期部分。
  • 我将like替换为=。您应该使用=,除非您真的想要处理通配符。