-1

SUMについて質問です。

私はテーブルを持っています

ID | JOBSITE | EMPLOYEE |  VENDOR  |  PRICE
---+---------+----------+----------+----------
1  |  Job1   |  CHris   | Vendor1  |  100.00
2  |  Job2   |  Matt    | Vendor1  |  100.00
3  |  Job3   |  Chris   | Vendor2  |  100.00

Vendor1 だけからすべてをクエリすると、うまくいきます。私が使う

Select * From table WHERE vendor="vendor1" 

完全に2行が表示されます(実際にはそれ以上ですが、この例では2行になります)SUMステートメントを使用したいのですが、そうすると1行しか表示されないようですが、合計SUMはうまく機能します. いくつかの異なる方法を試しましたが、SQL エラーが発生するか、このように 1 行だけ表示されます。

ID, JOBESITE, EMPLOYEE, VENDOR, PRICE, TOTALPRICE
1,  Job1,     Chris,    Vendor1, 100.00, 200.00

合計は機能しますが、Vendor1 に関連するすべての行が表示されるわけではありません。

それを機能させる方法はありますか?私は試した

Select *, SUM(price) From table Where vendor="vendor1" 

それが基本的に私が欲しいものです。コードが機能しないことに気付きました。コードが機能した場合でも、正しい合計で合計価格の列を取得するだけです。または、ID行が1つだけです。Totalprice 列が追加され、再び正しい値が表示されます。しかし、私が望むのは、特定のベンダーに関連付けられているすべての行を取得し、基本的に行 1 列 6 にすることです。合計金額。すべての価格を合計して

4

1 に答える 1

6

集約とGROUP BY

SELECT t1.id, 
   t1.jobsite, 
   t1.employee, 
   t1.vendor,
   t2.TotalPrice
FROM yourTable t1
INNER JOIN 
(
   SELECT SUM(price) TotalPrice, vendor
   FROM yourTable
   GROUP BY vendor
) t2
   ON t1.vendor = t2.vendor
WHERE t1.vendor = 'vendor 1'

デモで SQL Fiddle を参照してください

SUM()結果を得るには、 aと aを使用する必要がありますGROUP BY。それぞれの合計vendorが必要なので、GROUP BYそのフィールドに が必要です。AGROUP BYは、互いに等しいすべての値を結合します。

サブクエリを使用して を取得する必要があります。これは、すべてのレコードにtotalpricea を適用するSUM()と、ID、ジョブサイト、従業員がレコードごとに異なるため、正しい結果が得られないためです。

サブクエリを適用するデモとサブクエリを使用しないSQL Fiddle を参照してください。SUM()GROUP BY

于 2012-08-24T15:14:00.577 に答える