2013-08-24 121 views
0

的我有三列的表:
SQL查詢總和,合計行

LOCATION | ITEM | QUANTITY 
-------------------------------- 
001  RED CAR  1 
002  RED CAR  3 
003  BLUE CAR  5 
002  BLUE CAR  2 
001  RED CAR  2 
002  RED CAR  5 



我試着去運行一個查詢,會告訴我有多少的每個唯一項目每 位置有。我在同一位置有多條線路的原因是,每個位置可能有多個人同時輸入記錄。

目標是獲得項目總數和每個位置 輸入的總數。

ITEM  | LOCATION 001 | LOCATION 002 | LOCATION 003 | TOTAL 
-------------------------------------------------------------- 
RED CAR 3    8    0    11 
BLUE CAR 0    2    5    7 



我不能拿出一個SELECT查詢,將讓我無論是總 每個位置和總的每個項目。我試圖用 完成這個單一的查詢,而不是運行兩個單獨的查詢請求。任何幫助 將不勝感激。

我有測試鏈接來嘗試一些不同的查詢。
http://www.sqlfiddle.com/#!2/c33cee/1/0

回答

1

嘗試此查詢:

SELECT ITEM 
    ,SUM(CASE WHEN LOCATION = 001 THEN QUANTITY ELSE 0 END) AS Location_001 
    ,SUM(CASE WHEN LOCATION = 002 THEN QUANTITY ELSE 0 END) AS Location_002 
    ,SUM(CASE WHEN LOCATION = 003 THEN QUANTITY ELSE 0 END) AS Location_003 
    ,SUM(Quantity) AS Total 
FROM Table1 
GROUP BY ITEM; 

在情況下,如果你不知道的地點,你可以試試這個動態查詢:

SET @sql = NULL; 
SELECT 
    GROUP_CONCAT(DISTINCT 
    CONCAT(
     'SUM(CASE WHEN `LOCATION` = ''', 
     `LOCATION`, 
     ''' THEN QUANTITY ELSE 0 END) AS `', 
     `LOCATION`, '`' 
    ) 
) INTO @sql 
FROM Table1; 

SET @sql = CONCAT('SELECT ITEM, ', @sql,' 
        ,SUM(Quantity) AS Total 
        FROM Table1 
        GROUP BY ITEM 
        '); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

結果:

|  ITEM | 1 | 2 | 3 | TOTAL | 
|----------|---|---|---|-------| 
| BLUE CAR | 0 | 2 | 5 |  7 | 
| RED CAR | 3 | 8 | 0 | 11 | 

this SQLFiddle

1

如果所有位置的手之前知道你可以做

SELECT item, 
     SUM(CASE WHEN location = 1 THEN quantity ELSE 0 END) location_001, 
     SUM(CASE WHEN location = 2 THEN quantity ELSE 0 END) location_002, 
     SUM(CASE WHEN location = 3 THEN quantity ELSE 0 END) location_003, 
     SUM(quantity) total 
    FROM car_uploads 
GROUP BY item 

輸出:

 
|  ITEM | LOCATION_001 | LOCATION_002 | LOCATION_003 | TOTAL | 
-----------|--------------|--------------|--------------|-------| 
| BLUE CAR |   0 |   2 |   5 |  7 | 
| RED CAR |   3 |   8 |   0 | 11 | 

這裏是SQLFiddle演示