2017-02-08 5 views
0

organization列とmi_status列を持つMicrosoft SQLテーブルがあります。両方とも文字列です。私は、各レコード(グループ化された組織)ごとに、どれくらいのレコードにmi_statusが「在庫あり」であるか、いくつの合計レコードがあるか、そして在庫の何%が在庫であるかを調べる必要があります。データのSQL%には値が含まれています

私は簡単にこのような何かを経由しての株式一部を取得することができます

SELECT organization, count(*) 
FROM table 
WHERE mi_status = 'In Stock' 
GROUP BY organiztion 

が、私は「どこ」を持っているので、私も同じ選択で合計行を取得する方法がわかりませんそこに句。

答えて

3

使用条件の集約:

SELECT organization, count(*) as total, 
     SUM(CASE WHEN mi_status = 'In Stock' THEN 1 ELSE 0 END) as total_instock, 
     AVG(CASE WHEN mi_status = 'In Stock' THEN 1.0 ELSE 0 END) as proportion_instock 
FROM table 
GROUP BY organization; 
+0

ニース思考が、あなたはAVG' – Lamak

+0

@Lamak Isnと'にそれを変更する必要がありますそれは素晴らしい?ゴードンは今朝早くこれを実演した。私はバックポケットにどれくらいの時間がかかっているのか疑問に思います –

+0

素晴らしい、ありがとう! – Scott

0
SELECT 
    organization, 
    count(*), 
    (SELECT COUNT(*) FROM table) as total 
FROM 
    table 
WHERE 
    mi_status = 'In Stock' 
GROUP BY 
    organization 
2

使用CASEの式: `AVERAGE`と

SELECT organization, 
     SUM(CASE WHEN mi_status = 'In Stock' THEN 1 ELSE 0 END) In_Stock, 
     COUNT(*) Total, 
     SUM(CASE WHEN mi_status = 'In Stock' THEN 1 ELSE 0 END)*100.0/COUNT(*) Percentage 
FROM dbo.YourTable 
GROUP BY organization; 
関連する問題