2016-05-17 70 views
0

私は次のようなテーブルがある:条件文と集約

`units` 
+----+------+-------+---------------+-------+ 
| id | tech | jobID |  city  | units | 
+----+------+-------+---------------+-------+ 
| 1 | 1234 | 8535 | San Jose  |  3 | 
| 2 | 1234 | 8253 | San Francisco |  4 | 
| 3 | 1234 | 2457 | San Francisco |  5 | 
| 4 | 1234 | 8351 | Mountain View |  8 | 
+----+------+-------+---------------+-------+ 

といくつかの計算を行うために、このデータを使用するビュー:

`total` 
+----+--------+------+-------+ 
| id | name | tech | total | 
+----+--------+------+-------+ 
| 1 | Dan | 1234 | 12 | 
| 2 | Dan SF | 1234 | 12 | 
+----+--------+------+-------+ ... 

私の問題は、私はということですサンフランシスコで完成したDanのユニット数と彼が他の所で行ったユニットの量を合計しようとしました(SFで何台のユニットが完成したかを具体的に追跡する必要があります)。しかし、私は選択クエリ内でこれを行う方法がわかりません。現在の合計テーブルを見ると、両方の合計値が都市に関係なくすべてのユニットを単純に合計していることがわかります。

私は次のように取得したい:

`total` 
+----+--------+------+-------+ 
| id | name | tech | total | 
+----+--------+------+-------+ 
| 1 | Dan | 1234 | 11 | 
| 2 | Dan SF | 1234 |  9 | 
+----+--------+------+-------+ ... 

私は望ましい結果を得るためにCASEを使用する方法がわからないだから、私は私のSELECTを書いて助けを必要としています。私は、次のことを試してみた:

SELECT otherTable.name AS name, units.tech AS tech, 
(CASE WHEN City = 'SAN FRANCISCO' THEN SUM(units) 
     ELSE SUM(units) 
) AS total 
FROM units, otherTable 
GROUP BY name 

が、明らかに私は2つの集合体で都市間の差別はないよので、これは動作しません。

ご協力いただきまして誠にありがとうございます。

EDIT:次のように私の現在のビュー(情報に参加して)のためのSELECTクエリは次のとおりです。otherTableについては

SELECT otherTable.name, units.tech, SUM(units.units) 
FROM units 
LEFT JOIN otherTable ON otherTable.tech = units.tech 
GROUP BY name 

、それは単に名前で、各ハイテクIDを関連付ける:

`otherTable` 
+----+--------+------+-----------+ 
| id | name | tech | otherInfo | 
+----+--------+------+-----------+ 
| 1 | Dan | 1234 | ...... | 
+----+--------+------+-----------+ 
+0

を与えるだろう。しかし、あなたのビューのサンプルでは、​​他の人のための 'サンフランシスコ'と 'ダン'のユーザー 'ダンSF'を表示します。それはどうですか? 2つのテーブルがどのように関連しているかを示してください。ユニットを完成させたのがダンだとどうやって分かりますか? –

+0

申し訳ありませんが、私は参加情報で投稿を更新しました。 – mathmorales

+0

さて、「Dan SF」という名前が作られています。 pgreen2の 'UNION ALL'クエリを使用し、次に調整された結合を使用します。 –

答えて

1

まず、基本クエリが間違っているようです。そこunitsotherTable間の結合については何もないではありませんが、私はそれを置くには十分を知らない。

それはあなたがそれではなく、列の行に勃発したいだろうと私には奇妙に思えるが、あなたは可能性が次の操作を行います

SELECT otherTable.name AS name, units.tech AS tech, 
SUM(units) AS total 
FROM units, otherTable 
-- not sure if this section should exclude 'SAN FRANCISO' or not 
GROUP BY name 
UNION ALL 
SELECT otherTable.name || ' SF' AS name, units.tech AS tech, 
SUM(units) AS total 
FROM units, otherTable 
WHERE City = 'SAN FRANCISCO' 
GROUP BY name 

これは、あなた

+--------+------+-------+ 
| name | tech | total | 
+--------+------+-------+ 
| Dan | 1234 | 11 | 
| Dan SF | 1234 |  9 | 
+--------+------+-------+ 

それとも、別の列をしたい場合、あなたはこの

を行うことができますを与えるだろう10

これはので、すべての名前は、すべてのユニットと組み合わせて、2つのテーブルを結合クロスしているあなたのクエリで

+--------+------+-------+----------+ 
| name | tech | total | sf_total | 
+--------+------+-------+----------+ 
| Dan | 1234 | 11 |  9 | 
+--------+------+-------+----------+ 
+0

私の急いで、私は結合情報を含めるのを忘れました。しかし、これはまさに私が必要としていたのです。なぜなら、このケースでCASEをどのように利用するのか分からず、これで十分でした。どうもありがとうございました! – mathmorales