сумма поворотных столбцов в новый столбец и вставка всех записей во временную таблицу - PullRequest
0 голосов
/ 17 апреля 2019

я хочу получить сумму значений поворотных столбцов в новый столбец и вставить выходные записи во временную таблицу

select * from (select v.JobNo as JobNo,aj.VehicleNumber as VehicleNo,isnull(g.ImageCount,0) as ImageCount,s.ParamKey as ImageType    from dbo.Visits v       inner join (select VisitId as visit,paramkey,Value from dbo.VisitParams) s on s.visit = v.visitid       left outer join (       select VisitId,FieldId, ( COUNT(*)) as ImageCount       from dbo.vw_ImageGallery        group by FieldId,VisitId) g on s.visit = g.VisitId and g.FieldId = s.ParamKey           inner join Users u on u.UserId = v.CreatedBy  inner join AssignedJobs aj on aj.CSRCode = u.Code and aj.JobNumber = v.JobNo      where v.VisitType = 1 and v.TimeVisited >= '2019-03-01' AND v.TimeVisited <= '2019-04-01'           )as a          

PIVOT (      max([ImageCount])      FOR [ImageType] IN ([5],[20],[21]) ) as pvt order by [JobNo]

мой фактический выход составляет

job no       vehicleno  1   2   5
---------------------------------------------------------
BL1052385     648792    0   8   0
BL1054161     CAT2410   2   8   0
BL1107290     NB 0134   0   5   0
BL1174714     GP 3784   1   7   3

я ожидаю выводкак

job no       vehicleno  1   2   5  Total Count
----------------------------------------------------------
BL1052385     648792    0   8   0      8
BL1054161     CAT2410   2   8   0      10
BL1107290     NB 0134   0   5   0      5
BL1174714     GP 3784   1   7   3      11

1 Ответ

0 голосов
/ 17 апреля 2019

Я предпочитаю использовать условную агрегацию, а не pivot. Это более гибко:

select v.JobNo, aj.VehicleNumber,
       sum(case when vp.ParamKey = 1 then g.ImageCount else 0 end) as imagetype_1,
       sum(case when vp.ParamKey = 20 then g.ImageCount else 0 end) as imagetype_20,
       sum(case when vp.ParamKey = 21 then g.ImageCount else 0 end) as imagetype_21,
       count(*) as total
from dbo.Visits v join
     dbo.VisitParams vp  
     on vp.visit = v.visitid join
     Users u
     on u.UserId = v.CreatedBy join
     AssignedJobs aj
     on aj.CSRCode = u.Code and
        aj.JobNumber = v.JobNo left outer join
     (select VisitId, FieldId, count(*) as ImageCount       
      from dbo.vw_ImageGallery ig
      group by FieldId, VisitId
     ) g
     on vp.visit = g.VisitId and
        g.FieldId = s.ParamKey
where v.VisitType = 1 and
      v.TimeVisited >= '2019-03-01' and
      v.TimeVisited <= '2019-04-01' and
      vp.ParamKey in (5, 20, 21)
group by v.JobNo, aj.VehicleNumber;        
order by v.JobNo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...