2011-08-15 10 views
2

select count distinctを使用して、列内のレコード数をカウントしています。タイプ
ABC-------異なる列の値が1である列の行数をカウントする

名前:しかし、私は別の列の値は、だから私のテーブルには、ビットのようになります。1.

あるレコードをカウントします-------- 1
def ---------- 2
ghi ---------- 2
jkl ---------- -1
mno -------- 1

と私は、 abc、jkl、mnoを返し、したがって '3'を返します。

これはCASE関数ではこれを実行できませんでした。これは、同じ列の条件でのみ機能するように見えるためです。

編集:申し訳ありませんが、追加する必要があります、両方の種類を数えるクエリを作成する必要があります。 だから、結果は、より多くのようになります。あなたがしたい場合はSELECT COUNT(1)タイプ= 1

答えて

2
SELECT COUNT(*) 
    FROM dbo.[table name] 
    WHERE [type] = 1; 

TBLから2

1
;WITH MyTable (Name, [Type]) AS 
(
SELECT 'abc', 1 
UNION 
SELECT 'def', 2 
UNION 
SELECT 'ghi', 2 
UNION 
SELECT 'jkl', 1 
UNION 
SELECT 'mno', 1 
) 
SELECT COUNT(DISTINCT Name) 
FROM MyTable 
WHERE [Type] = 1 
+3

少しのヒント:前にセミコロンをつけるWITH :) – sll

+0

@sllev:あなたが正しいです、それはいつも;を使うのがベストです。固定 –

1

--- 3 2 --- 1タイプ別にカウントを返す:

SELECT [type], COUNT(*) 
    FROM dbo.[table name] 
    GROUP BY [type] 
    ORDER BY [type]; 

あなたは、列名とタイプのようなキーワードを使用しないでください - あなたがいる場合、角括弧の多くを回避することができますより具体的で予約語ではない単語を使用します。

2

私はあなたが(それは二回、あなたのテーブルにある場合は、1)を2回、「ABC」(カウントしたくないと仮定して)したいと思います:

select count(distinct name) 
    from mytable 
where type = 1 

EDIT:すべて取得するためのタイプ

select type, count(distinct name) 
    from mytable 
group by type 
order by type 
+0

クイックアンサーに感謝しますが、私は両方の種類を数えるクエリを作成することを言い忘れました。だから結果はもっとよく似ているはずです:1 --- 3 2 --- 2 – Sander

+0

ああ、はい。それは十分にうまくいく。ありがとう! – Sander

関連する問題