Pivot和INNER JOIN

时间:2017-01-30 15:25:27

标签: sql pivot

我一直在尝试运行一个数据透视查询,但是我很难,我很新,所以请耐心等待

我想要的是返回每个月份的数量值,jan,feb ... dec,每个PartRef

这就是我所拥有的

SELECT PartRef
      , Year
      , fMonth
      , sum(Quantity) as Quantity

FROM(SELECT PartRef
              , year(DateClosed) as Year
              , month(DateClosed) as Month
              , SUM(fldShipped) as Quantity

     FROM PartsInvoice
     INNER JOIN Requests ON PartsInvoice.fID = Requests.WorkItemRef
     INNER JOIN PartsLine ON Requests.ID = PartsLine.RequestRef

     WHERE Closed = 1 and DateClosed > DateAdd(mm, DateDiff(mm, 0, GetDate()) -12, 0)
     GROUP BY PartRef, year(DateClosed), month(DateClosed)

) as SalesHits

PIVOT (

SUM(NOT SURE)FOR NOT SURE IN ([Jan],[Feb],[Mar],[Apr],[May],[June],[July],[Ago],[Sep],[Oct],[Nov],[Dec])
)AS Hits

GROUP BY PartRef, Year, Month

2 个答案:

答案 0 :(得分:0)

这里有一个示例,说明它如何与您的表格一起使用。

declare @table table(
    partref int,
    year int,
    month nvarchar(50),
    quantity int
)

insert into @table values
(1,2016,'jan',12),
(1,2016,'feb',12),
(2,2016,'jan',12),
(2,2016,'feb',12),
(1,2016,'jan',12)

select PartRef
      , year
      , sum([jan]) 'Jan',sum([feb]) 'Feb'
      ,sum([mar]),sum([apr]),sum([may]),sum([jun]),sum([jul])
      ,sum([aug]),sum([sep]),sum([oct]),sum([nov]),sum([dec])
      from(
        SELECT PartRef
              , year
              , [jan],[feb],[mar],[apr],[may],[jun],[jul],[aug],[sep],[oct],[nov],[dec]
              from @table
              PIVOT (
        SUM(quantity)FOR month IN ([jan],[feb],[mar],[apr],[may],[jun],[jul],[aug],[sep],[oct],[nov],[dec])
        )AS Hits
) as t
group by PartRef,year

答案 1 :(得分:0)

这是我的查询的全部范围,我相信我得到它的工作:)

SELECT *

  FROM(SELECT PartRef
  , year(DateClosed) as Year
  , month(DateClosed) as Month
  , SUM(Shipped) as Quantity

  FROM PartsInvoice
  INNER JOIN Requests ON PartsInvoice.ID = Requests.WorkItemRef
  INNER JOIN PartsLine ON Requests.ID = PartsLine.RequestRef

  WHERE HasClosed = 1 and DateClosed > DateAdd(mm, DateDiff(mm, 0, GetDate()) -13, 0)
  GROUP BY PartRef, year(DateClosed), month(DateClosed)

  UNION ALL

  --RO
  SELECT PartRef
  , year(DateClosed) as Year
  , month(DateClosed) as Month
  , SUM(Shipped) as Quantity

  FROM RepairOrder
  INNER JOIN Requests ON RepairOrder.ID = Requests.WorkItemRef
  INNER JOIN PartsLine ON Requests.ID = PartsLine.RequestRef

  WHERE Status = 3 and DateClosed > DateAdd(mm, DateDiff(mm, 0, GetDate()) -13, 0)
  GROUP BY PartRef, year(DateClosed), month(DateClosed)

  UNION ALL

  -- Historical Hits
  SELECT PartRef
  , year(date) as Year
  , month(Date) as Month
  , SUM(Quantity) as Quantity

  FROM PartsHistoricalHits

  WHERE Date > DateAdd(mm, DateDiff(mm, 0, GetDate()) -13, 0)
  GROUP BY PartRef, year(Date), month(Date)


  ) as SalesHits

  PIVOT (

  COUNT (Quantity)FOR fldMonth IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13])
  )AS Hits