2012-01-18 4 views
2
SELECT k.condition, 
     SUM(IIf(AnimalType=3,1,0)) AS Carnivore, 
     SUM(IIf(AnimalType=4,1,0)) as Herbivore 
From Animals a inner join knownconditions k on a.id = k.id 
where a.id in (3, 11, 12) 
AND (AnimalType=3 OR AnimalType = 4) 
Group by a.id, k.id 

上記のクエリは、特定の種類の条件を持つすべてのAnimalsを取得します。このように:この例のために合計を使用してクエリの条件と一致しない行をフェッチする方法

Condition | Carnivore | Herbivore 
------------| ----------|------------- 
Condition1 | 33  | 3 
Condition2 | 2   | 4 

、幸いにもAnimalsテーブルには動物が条件Condition3を持っていないよう

ID | Condition 
------|------------ 
3  | Condition3 

以下のようknownconditionsテーブルのレコードが存在することを検討してください。したがって、私の上記の質問はリストもCondition3しません。もたらした結果であるように、私は私のクエリを変更するにはどうすればよい

Condition | Carnivore | Herbivore 
------------| ----------|------------- 
Condition1 | 33  | 3 
Condition2 | 2   | 4 
Condition3 | 0   | 0 
+0

は、あなたのテーブル定義を投稿してもらえますか?それだけで理解するのはちょっと難しいです。ありがとう。 – MPelletier

+0

私は大好きですが、実際のテーブルははるかに大きく複雑です。だから、ピンが私の問題を指摘するデザインを思いついたのです。 – James

答えて

0

異なるリテラルを使用してアプローチし、組合:

SELECT condition, SUM(Carnivore), SUM(Herbivore) 
FROM 
(
    SELECT k.condition, 
     SUM(IIf(AnimalType=3,1,0)) AS Carnivore, 
     SUM(IIf(AnimalType=4,1,0)) as Herbivore 
    From Animals a inner join knownconditions k on a.id = k.id 
    where a.id in (3, 11, 12) 
    AND (AnimalType=3 OR AnimalType = 4) 
    Group by k.condition, a.id, k.id 
    UNION 
    SELECT condition, 0, 0 
    From knownconditions 
) 
GROUP BY condition 
0

が外側への変換は参加:

SELECT k.condition, 
    SUM(IIf(AnimalType=3,1,0)) AS Carnivore, 
    SUM(IIf(AnimalType=4,1,0)) as Herbivore 
From knownconditions k 
    Left join Animals a 
     on a.id = k.id 
     And a.id in (3, 11, 12) 
     And AnimalType In (3, 4) 
Group by k.id, a.id 

これは、それぞれのために、knownConditionsのすべての条件を作り出す、となります動物種、各条件を持つ既知の条件のレコードの総数。

+0

それでも動作しません。私は外部結合について読んだことがありましたが、試してみましたが動作しませんでした。私はちょうど動物のテーブルにID 3がまったく含まれていないという点を再び強調したい – James

0

左に参加して、動物対VS。既知の条件。動物が条件に応じて数えられるように。条件を満たしていない場合は0を返します。

SELECT k.condition, 
     SUM(IIf(AnimalType=3,1,0)) AS Carnivore, 
     SUM(IIf(AnimalType=4,1,0)) as Herbivore 
From Animals a LEFT JOIN knownconditions k on a.id = k.id 
AND a.id in (3, 11, 12) 
AND (AnimalType=3 OR AnimalType = 4) 
Group by a.id, k.id 

コメントしてください。私はそれをテストしていない。

関連する問題