不成功使用group by进行透视

时间:2013-08-06 08:56:39

标签: sql sql-server pivot

我已经构建了这个查询:

SELECT *
FROM 
(
   SELECT [VendorCode], [VendorName], 
      year(CheckDate) as 'year',
      left(datename(month,CheckDate),3) as [month], 
      [CheckSum] as 'Amount'
   FROM ocho 
   WHERE [Canceled] ='N'
) as abc
PIVOT
(
  SUM(Amount)
  FOR [month] IN (jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec)
) AS sumpivot

我得到一张表,每个供应商不会总结为一行,每个供应商在12个月或更短时间内,取决于我们在支票中支付了多少个月。我试图把小组分成小组 vendorcodename我失败了。

1 个答案:

答案 0 :(得分:0)

我认为一切正常 -

查询:

DECLARE @temp TABLE
(
      VendorCode INT
    , VendorName NVARCHAR(50)
    , CheckDate DATETIME
    , Canceled CHAR(1)
    , [CheckSum] DECIMAL(10,2)
)

INSERT INTO @temp (VendorCode, VendorName, CheckDate, Canceled, [CheckSum])
VALUES 
    (1, '1', '20100101', 'N', 4),
    (2, '2', '20100303', 'N', 2),
    (2, '2', '20100601', 'N', 1),
    (2, '2', '20100604', 'N', 99)

SELECT *
FROM 
(
    SELECT 
          [VendorCode]
        , [VendorName]
        , [year] = YEAR(CheckDate)
        , [month] = LEFT(DATENAME(MONTH, CheckDate), 3) 
        , Amount = [CheckSum] 
    FROM @temp 
    WHERE Canceled = 'N'
) abc
PIVOT
(
    SUM(Amount)
    FOR [month] IN (
                jan, feb, mar, 
                apr, may, jun, 
                jul, aug, sep, 
                oct, nov, [dec])
) sumpivot

输出:

VendorCode  VendorName year   jan    feb   mar   apr   may   jun     jul   aug   sep   oct    nov    dec
----------- ---------- ------ ------ ----- ----- ----- ----- ------- ----- ----- ----- ------ ------ ------
1           1          2010   4.00   NULL  NULL  NULL  NULL  NULL    NULL  NULL  NULL  NULL   NULL   NULL
2           2          2010   NULL   NULL  2.00  NULL  NULL  100.00  NULL  NULL  NULL  NULL   NULL   NULL