2016-10-10 75 views
1

我試圖將我所有的庫存移動都放入2015或2016桶。在我選擇的查詢部分中,我開始工作,但它爲我提供了兩行,每個項目在2015年有數量,2016年爲0,2015年爲0,2016年爲第二行。所以我想我可以查詢select語句和group來爲每個項目獲取一行。但是我收到了「關鍵字'GROUP'附近的語法錯誤」錯誤。有人能讓我朝着正確的方向前進嗎?錯誤發生在第二個Group By From子句之外。謝謝。關鍵字'GROUP'附近的語法不正確 - MA

SELECT [Item] 
    ,[Item Desc] 
    ,sum[2015 Usage] 
    ,sum[2016 Usage] 

FROM (SELECT 
      mtm.[item] 'Item' 
      ,im.[description] 'Item Desc' 
      ,case when year(convert(varchar(10), convert(date,mtm.[trans_date],1),101))='2015' then sum(mtm.[qty]) else 0 end '2015 Usage' 
      ,case when year(convert(varchar(10), convert(date,mtm.[trans_date],1),101))='2016' then sum(mtm.[qty]) else 0 end '2016 Usage' 

    FROM [ITEC_App].[dbo].[matltran_mst] mtm, [ITEC_App].[dbo].[item_mst] im 

    WHERE 
    mtm.[item] = im.[item] 
    and 
    mtm.[trans_type] NOT IN ('A', 'B', 'C', 'F', 'G', 'H', 'M', 'N', 'R') 
    and 
    mtm.[ref_type] NOT IN ('P') 

    GROUP BY 
    mtm.[item] 
    ,im.[description] 
    ,year(convert(varchar(10), convert(date,mtm.[trans_date],1),101))) 

GROUP BY 
    [Item] 
    ,[Item Desc] 
+1

您需要子查詢的別名 –

+0

@juergend是正確的。在三個右括號之後並在最後一個組之前添加一個「x」 – Bohemian

回答

2

你的查詢是這樣的:

(
    SELECT . . . 
    GROUP BY 
    mtm.[item] 
    ,im.[description] 
    ,year(convert(varchar(10), convert(date,mtm.[trans_date],1),101)) 
) 

在SQL Server中,所有的子查詢需要一個表的別名。因此,您只需添加一個:

(
    SELECT . . . 
    GROUP BY 
    mtm.[item] 
    ,im.[description] 
    ,year(convert(varchar(10), convert(date,mtm.[trans_date],1),101)) 
) i 
+1

在SQL Server中?哪個數據庫*不需要別名? – Bohemian

+0

謝謝!我有一個別名,但有一個ORDER BY問題,並把它拿出來思考別的東西! –

+0

@波希米亞。 。 。 Oracle for one。 –

相關問題