2012-02-22 13 views
0

いくつかの行を数えてSQLでグループ化しようとすると問題が発生します。SQLの行数をカウントしてグループ化する際の問題

以下のSELECTクエリを使用してテーブルを作成しました。私がやろうとしています何

SELECT ward.ward_no, bed_no 
FROM ward, bed 
WHERE ward.ward_no = bed.ward_no 

ward_no bed_no 

w1   1 
w1   2 
w1   3 
w1   4 
w2   5 
w2   6 
w2   7 
w3   8 
w3   9 
w3   10 
w4   11 

は、それがすなわちW1とどのように多くのフィールドを示すフィールドがそれである各病棟を示していないテーブルを作成することです。

eg. w1 3 
    w2 3 
    w3 3 

私はあなただけのSQLを持っていると思う、私はそう...

SELECT ward.ward_no, bed_no 
FROM ward, bed 
WHERE ward.ward_no = bed.ward_no 
AND COUNT (bed_no) AS beds_in_ward 
GROUP BY ward_no; 

などの分野BY COUNT & GROUPを試してみましたが、無喜びで、何かアドバイスが完全に

+0

、それはあなたが実際のエラーメッセージや、あなたの質問で期待/実際の出力が含まれている場合ので、我々は問題の本質が何であるかを見ることができるのに役立ちます。 「喜んではいない」ということは、十分な情報を提供していません。 – JohnFx

答えて

0

をいただければ幸いです構文が間違っている。これを試して。

SELECT ward.ward_no, count(bed.Bed_No) 
FROM ward INNER JOIN bed (on ward.ward_no = bed.ward_no) 
GROUP BY ward_no; 
2
SELECT ward.ward_no, COUNT(*) AS beds_in_ward 
    FROM ward 
     INNER JOIN bed 
      ON ward.ward_no = bed.ward_no 
    GROUP BY ward.ward_no 
0

うーん...多分あなたは、各病棟のベッド数をしたいですか? あなたの例は正確には正しくないかもしれません - w1に4があるはずです。

そうなら、これを試してみてください。

SELECT ward.ward_no, count(bed_no) 
FROM ward, bed 
WHERE ward.ward_no = bed.ward_no 
group by ward.ward_no 
0

は、上記の回答のほとんどが正しいです。 (SQLServerのでは)もう一つの方法は、パーティション機能を使用することです:あなたは1つのステートメントでのグループの複数のタイプを持つことが起こるか、あなたがして、グループ内にない列を含める場合を除き、愚かなようだ

SELECT distinct ward.ward_no, 
    count(1) over (partition by ward_no) as c 
FROM ward, bed 
WHERE ward.ward_no = bed.ward_no 

声明:今後の参考のため

SELECT distinct ward.ward_no, 
    ward.whatever_column_you_want, 
    bed.whatever_column_you_want, 
    count(1) over (partition by ward_no) as c 
FROM ward, bed 
WHERE ward.ward_no = bed.ward_no 

OR

SELECT distinct ward.ward_no, 
    some_other_columns, 
    count(1) over (partition by ward_no) as bed_count, 
    count(1) over (partition by some_other_columns) as other_count 
FROM ward, bed 
WHERE ward.ward_no = bed.ward_no 
関連する問題