web-dev-qa-db-ja.com

列の値が一致する場合のSQL合計フィールド

タイトルは言葉に難しかったですが、質問は非常に簡単です。私はここ全体を検索しましたが、私の特定の問題について何かが見つからなかったので、ここにあります。 Microsoft SQL Server Management Studio 2010を使用しています。

テーブルは現在このように見えます

  | Value | Product Name|
  |  300  | Bike        |
  |  400  | Bike        |
  |  300  | Car         |
  |  300  | Car         |

製品名が一致する値の合計を示すテーブルが必要です-このように

  | TOTAL | ProductName |
  |  700  | Bike        |
  |  600  | Car         |

私は簡単に試しました

 SELECT
      SUM(Value) AS 'Total'
      ,ProductName
 FROM TableX

しかし、上記は機能しません。列のすべての値の合計を取得することになります。製品名の一致に基づいてどのように合計できますか?

ありがとう!

11
Ashton Sheets
SELECT SUM(Value) AS 'Total', [Product Name]
FROM TableX  
GROUP BY [Product Name]

SQL Fiddle例

16
RedFilter

SUMステートメントの列で集計関数(MINMAXSELECT ...)を使用する場合は常に、_GROUP BY_。これは、集計をグループ化する列を示すグループ関数です。さらに、集計に含まれていない列をSELECTステートメントに含めることはできません。

たとえば、次の構文は無効です(_col2_にない列(_GROUP BY_)を指定しているためです(MySQLではこれが許可されています)。

_SELECT col1, col2, SUM(col3)
FROM table
GROUP BY col1
_

あなたの質問に対する解決策は:

_SELECT ProductName, SUM(Value) AS 'Total'
FROM TableX
GROUP BY ProductName
_
4
Kermit