2016-07-04 12 views
0

以下はSQL Serverデータベースの現在のレコードです。クエリを作成したい場合は、おそらく私のカウントを返すストアドプロシージャを作成します。あなたが見ることができるように、現在のテーブルの各AIdに対して3つのレコードがあります。SQL Serverのレコード数をカウントする複数の条件付きクエリ

IsCompleteが1に設定された同じAId(例えば、1)が少なくとも2回出現する.1のAIdに3つのレコードがあり、そのうちの2つが真(1)に設定されている場合はカウントする必要がある。だから私の条件によると、質問1、3、4は少なくとも1つのIsCompleteがtrueに設定されているので、私はcount 3を返します。

ID PId SId Section      IsComplete AId 

259 260 3 Area 1 - Items (1 - 4) 1    1 
260 260 4 Area 1 - Items (5 - 8) 1    1 
261 260 5 Area 1 - Items (9 - 12) 0    1 
262 260 6 Area 2 - Items (1 - 4) 1    2 
263 260 7 Area 2 - Items (5 - 8) 0    2 
264 260 8 Area 2 - Items (9 - 12) 0    2 
265 260 9 Area 3 - Items (1 - 4) 1    3 
266 260 10 Area 3 - Items (5 - 8) 1    3 
267 260 11 Area 3 - Items (9 - 12) 0    3 
268 260 12 Area 4 - Items (1 - 4) 1    4 
269 260 13 Area 4 - Items (5 - 8) 1    4 
270 260 14 Area 4 - Items (9 - 12) 0    4 

答えて

3

は、私はあなたがこの意味を考える:

;WITH t as (
    SELECT *, COUNT(CASE WHEN IsComplete = 1 THEN AID END) OVER (PARTITION BY AID) cnt 
    FROM yourTable 
)  
SELECT COUNT(DISTINCT AID) yourCount 
FROM t 
WHERE cnt >= 2; 

SELECT COUNT(DISTINCT AID) yourCount 
FROM (
    SELECT *, COUNT(CASE WHEN IsComplete = 1 THEN AID END) OVER (PARTITION BY AID) cnt 
    FROM yourTable) t 
WHERE cnt >= 2; 
+0

注:それは> = ...( "少なくとも2回出現") – ZLK

+0

@ZLK良い点、である必要がありTNX ;)。 –

+0

これはうまくいきましたが、この部分を別のクエリの中に配置する必要があります。私はそれが\t \t \t SELECT COUNT(DISTINCTエリアID)が \t \t \t \t \t \t(SELECT *、COUNT(CASE完了する= 1 THENエリアID END)OVER(FROM \t \t \t \t \t \tをItemsCount作るために改革することができますCNT tb_PackSections FROM \t \t \t) \t \t \t 01としてエリアID BY PARTITION)\t \t上記のcnt = 2 –

関連する問題