2017-03-28 8 views
2

で別の列に数を取得する:あなたが見ることができるようにだから私は現在、以下の表持つSQL

REF| STATUS 
OP1|0 
OP2|2 
OP2|4 
OP2|5 
OP3|7 
OP3|6 

を、OP2のための3 statueses及びOP3のための2つのステータスがあります。 私は、次のアーカイブしようとしています:

REF| STATUS | COUNT 
OP1|0  |1 
OP2|2  |3 
OP2|4  |3 
OP2|5  |3 
OP3|7  |2 
OP3|6  |2 

Countは、各REFの状態の数です。

私はSQLを提供しましたが、何が間違っているのか分かりません。

SELECT ref,STATUS, (SELECT COUNT(STATUS) FROM orders WHERE STATUS > 0 GROUP BY ref) 
FROM orders 

私は、ステータス> 0は、上記のクエリは

SELECT ref,STATUS, COUNT(CASE WHEN STATUS>0 THEN 1 END) OVER(PARTITION BY REF1) 
FROM orders 

答えて

6

を使用しています相関サブクエリの使用:

select ref 
, status 
, (
    select count(i.status) 
    from orders i 
    where i.status > 0 
    and i.ref = o.ref 
) as OrderCount 
from orders o 

inner joinはおそらくかかわらず、より効率的になります:OVER

select 
    o.ref 
, o.status 
, i.OrderCount 
from orders o 
    left join (
    select 
     ref 
     , count(i.status) as OrderCount 
    from orders i 
    where i.status > 0 
    group by ref 
) i 
    on i.ref = o.ref 
+1

'COUNTを使用するには、どのように良い例()()'。今は – Charlesliam

1

に変更することができ、カウントを取得するために使用COUNT() OVER()

SELECT ref,STATUS, COUNT(*) OVER(PARTITION BY REF1) 
FROM orders 

SQLサーバーに2008

+0

がこの作業のみを必要とすることを知っています。OrderCount = count(i.status)をOrderCountとしてカウントします。 –

関連する問題