1

私はコーディングに比較的慣れておらず、解決策を探してみましたが、質問の言い回しが完全にはわかりません。次の例で詳しく説明するように、必要な結果を達成するための最も簡単な方法は何でしょうか。私はMSSQLを使用しています。

SELECT Unit, Quantity FROM SomeTable WHERE Parameter1 = 'x'

結果を教えてください:

ユニット| 量
---------------
a | 10
b | 10
c | 10
a | 10

これは私が必要とする結果です:

ユニット| 量
---------------
a | 20
b | 10
c | 10

どんな助けでも大歓迎です。

4

2 に答える 2

3

追加するGROUP BYので、あなたのためにトリックをしてください。

SELECT Unit, Sum(Quantity)
FROM SomeTable
WHERE Parameter1 = 'x'
GROUP BY Unit
于 2012-07-13T11:05:17.863 に答える
0

行を選択すると、「集計関数」が使用されていない限り、SQLは各行を個別に調べます。集計は、たとえば、sum()、count()、avg()、min()、およびmax()です。(さらに多くのベンダーSQLパッケージで。)これが、結果セットにAの2つの「コピー」が含まれる理由です。SQLは、2つの異なる行であるため、それぞれを個別に表示します。代わりに、これらの関数を使用して集計値を見つけることができます。

SQLが集計を調べるとき、調べる行を知る必要があります。デフォルトでは、クエリで使用されるすべての数量が集計である場合、すべての行が調べられます。たとえば、あなたの例では、基準に一致する列のすべての値の合計であるSelect Sum(Quantity) from SomeTable where Parameter1='x'を返します。40

Unit行のグループの集合体、この場合は同じ値を持つアイテムを探しています。Group BySQLにこれを伝えるには、句を使用してグループを定義する方法をSQLに伝える必要があります。Bluefeetの回答が指摘しているように、これは次のように書くことで実行できます。

SELECT Unit, Sum(Quantity)
FROM SomeTable
WHERE Parameter1 = 'x'
GROUP BY Unit

一般的なポインタとして、グループ化せずに集計と値を検索する場合、クエリは失敗します。たとえば、クエリをParameter1 ='x'に制限する代わりに、行に関連付けられているパラメータを確認したい場合は、これを選択リストに追加しSELECT Unit, Sum(Quantity), Parameter1...てクエリを実行したくなるかもしれません。SQLはパラメータを見つけるためにどの行を調べるべきかわからないため、これは機能しません。

必要に応じて、複数の列でグループ化できます。より複雑なグループが必要な場合は、さらに多くのトリックを使用できます。たとえば、caseステートメントまたは行の関数をグループ化して、偶数のすべてのアイテムの合計、または100ユニットを超える注文の平均注文サイズを見つけることができます。

于 2012-07-13T15:24:44.707 に答える