2014-03-04 41 views
0

我已經得到了以下基本上爲每個項目計算成本等的SQL。SQL組結果並根據產品添加它們

SELECT 
    L.LocID, 
    L.LocationName, 
    L.LocationSqrMtr, 
    L.LocationAddress, 
    L.LocationPostCode, 
    L.LocationContact, 
    I.SubPIDItemID, 
    I.SPID, 
    I.ProductID, 
    C.SubPIDCostID, 
    C.PricePerItem, 
    C.ManDayPerItem 
FROM 
    dbo.SubPIDCosts AS C 
    INNER JOIN dbo.SubPIDItems AS I ON 
     C.ProductID = I.ProductID 
    RIGHT OUTER JOIN dbo.SubPIDLocations AS L ON 
     I.LocationID = L.LocID AND C.LocationID = L.LocID 
WHERE C.SPID = 48 

這將返回:

+-------+--------------+----------------+-----------------+------------------+-----------------+--------------+----------+-----------+--------------+--------------+---------------+-----+----+---+-----+--------+--------+--------+------+ 
| LocID | LocationName | LocationSqrMtr | LocationAddress | LocationPostCode | LocationContact | SubPIDItemID | SPID | ProductID | SubPIDCostID | PricePerItem | ManDayPerItem |  | | |  |  |  |  |  | 
+-------+--------------+----------------+-----------------+------------------+-----------------+--------------+----------+-----------+--------------+--------------+---------------+-----+----+---+-----+--------+--------+--------+------+ 
| 379 |    |    | Location  | 1    | 1    | 345   | Generic | Building | Generic  | Building  | NULL   | 158 | 48 | |  |  | 108 | 0.3400 | 6.17 | 
| 379 |    |    | Location  | 1    | 1    | 345   | Generic | Building | Generic  | Building  | NULL   | 159 | 48 | 1 | 109 | 0.3400 |  | .47 |  | 
| 379 | 3   | Location  | 1    | 615    | Generic   | Building  | Generic | Building | NULL   | 160   | 48   |  | | | 110 | 0.7317 | 0.50 |  |  | 
| 379 | 4   | Location  |     |     | 615    | Generic  | Building | Generic | Building  | NULL   | 161   | 48 | | |  | 111 | 0.7317 | 0.50 |  | 
| 379 | 4   | Location  |     |     | 615    | Generic  | Building | Generic | Building  | NULL   | 16   |  | 48 | 1 | 11 |  | 0.7317 | 0.50 |  | 
+-------+--------------+----------------+-----------------+------------------+-----------------+--------------+----------+-----------+--------------+--------------+---------------+-----+----+---+-----+--------+--------+--------+------+ 

enter image description here

但是我希望做的是產品ID組吧。因此,所有那些的ProductID 22的那些應該添加值彌補ManDayPerItem和PricePerItem和LocationSqrMtr

它在下列情況下使用

enter image description here

我希望讓他們在很好地組合名單。

+1

你已經有答案了,只是你還沒有意識到,(它在以「但我想」開頭的句子)。查看「GROUP BY」。 – alroc

+0

問題是,除非您想爲單獨的位置/產品組合分開放置不同的行,否則您必須擺脫超炫的列(例如位置ID)。 –

回答

0

正如你所說,按組:

SELECT ProductID, SUM(ManDayPerItem), SUM(PricePerItem), SUM(LocationSqrMtr) 
FROM 
    dbo.SubPIDCosts AS C 
    INNER JOIN dbo.SubPIDItems AS I ON 
     C.ProductID = I.ProductID 
    RIGHT OUTER JOIN dbo.SubPIDLocations AS L ON 
     I.LocationID = L.LocID AND C.LocationID = L.LocID 
WHERE C.SPID = 48 
GROUP BY ProductID; 
+0

嗨,謝謝你,我得到了Msg 8117,Level 16,State 1,Line 1 對於sum運算符,操作數數據類型varchar無效。雖然錯誤。 – TMB87

+0

@TomBeech您需要先將列轉換爲數字類型(例如'CAST(PricePerItem AS money)')。首先,你的數據中有'PricePerItem ='Building''。這在我看來語義上不正確。 –

+0

我不能完全得到正確的轉換格式,SUM(Cast(ManDayPerItem as Decimal)似乎不起作用 – TMB87