2011-07-08 7 views
0

hHisが私のテーブルのダミーです:取得中にエラー

OUTPUT OQTY INPUT IQTY EN  FLEX 
Y3  1  X  2  Y  0 
Y4  1  X  2  Y  0 
Y5  1  X  2  N  0 
Y6  1  X  2  N  0 
Y1  1  X  2  Y  0 
Y2  1  X  2  Y  0 

そして、私のクエリは次のとおりです。

SELECT INPUT,count(*) 
FROM dummy 
GROUP BY INPUT 
HAVING EN = 'Y'; 

私は声明で、エラーではないグループを取得しています。

私はEN = Y.

と同様の入力のカウントは、私がここで間違って何をしているのですか?したいですかあなたがここにhavingを使用する必要はありません

答えて

5

、それはグループ化が(having count(*) > 2または類似のような)に行われた後にのみ計算できる条件をチェックするために一般的です。

使用何かのように:。

select input, 
      count(*) as quantity 
from  dummy 
where  en = 'Y' 
group by input 

あなたはすでにすべての行をロードし、中having句のキ​​ックの前にそれらをグループ化してきたので、あなたが使用having en = 'Y'があることができない理由は言い換えれば、あなたはもはやen列情報を持っていません。それは集約で失われています。

> DROP TABLE DUMMY% 
> CREATE TABLE DUMMY (OUTPUT CHAR(2), OQTY INTEGER, 
>> INPUT CHAR(1), IQTY INTEGER, EN CHAR(2), FLEX INTEGER)% 
> INSERT INTO DUMMY (OUTPUT, OQTY, INPUT, IQTY, EN, FLEX) VALUES 
>> ('Y3',1,'X',2,'Y',0), ('Y4',1,'X',2,'Y',0), ('Y5',1,'X',2,'N',0), 
>> ('Y6',1,'X',2,'N',0), ('Y1',1,'X',2,'Y',0), ('Y2',1,'X',2,'Y',0)% 

> SELECT * FROM DUMMY ORDER BY EN, INPUT, OUTPUT% 
    OUTPUT OQTY INPUT IQTY EN FLEX 
    ------ ---- ----- ---- -- ---- 
    Y5   1 X   2 N  0 
    Y6   1 X   2 N  0 
    Y1   1 X   2 Y  0 
    Y2   1 X   2 Y  0 
    Y3   1 X   2 Y  0 
    Y4   1 X   2 Y  0 

> SELECT  INPUT, COUNT(*) AS QUANT 
>> FROM  DUMMY 
>> WHERE EN = 'Y' 
>> GROUP BY INPUT% 
    INPUT QUANT 
    ----- ----- 
    X   4 

そして、関連する行の1つの更新:参照転写物以下


> UPDATE DUMMY SET INPUT = 'Z' WHERE OUTPUT = 'Y1'% 
> SELECT * FROM DUMMY ORDER BY EN, INPUT, OUTPUT% 
    OUTPUT OQTY INPUT IQTY EN FLEX 
    ------ ---- ----- ---- -- ---- 
    Y5   1 X   2 N  0 
    Y6   1 X   2 N  0 
    Y2   1 X   2 Y  0 
    Y3   1 X   2 Y  0 
    Y4   1 X   2 Y  0 
    Y1   1 Z   2 Y  0 

> SELECT  INPUT, COUNT(*) AS QUANT 
>> FROM  DUMMY 
>> WHERE EN = 'Y' 
>> GROUP BY INPUT% 
    INPUT QUANT 
    ----- ----- 
    X   3 
    Z   1 
+0

以下

チェックはそれがX 1 として出力が得られませんんが、所望1は、X 4 – Navin

+0

@navinです:あなたがしようとしたのですか? paxの解決策は私には正しいように見えます。 – Mat

+0

@Navin、いいえ、それは 'X 4'を与えるでしょう - アップデートを見てください。 – paxdiablo

0

の代わりにCOUNT(*)をカウントするために取得された列名を定義します。

 
SELECT INPUT,count(EN) As TotalEnCount 
FROM [dummy] 
where EN = 'Y' 
GROUP BY INPUT 

関連する問題