2017-03-02 8 views
0

私はこれらの3つのクエリを、私が把握できなかった割合の列を持つものにする方法を理解しようとしています。誰も助けることができますか?SQLクエリの変更/最適化

Select DISTINCT a.ASSN As Association, SUM(tonnage_adjusted) as TotalTonnage   
From DeliveryTons d INNER JOIN ReapingGroups a ON d.reaping_code = a.REAPING_GROUP_CODE 
WHERE reaping_code IS NOT NULL 
Group By a.ASSN 
ORDER BY Association 


Select DISTINCT a.ASSN As Association, SUM(tonnage_adjusted) as Monitored  
From DeliveryTons d INNER JOIN ReapingGroups a ON d.reaping_code = a.REAPING_GROUP_CODE 
WHERE remarks = '' AND reaping_code IS NOT NULL 
Group By a.ASSN 
ORDER BY Association 


Select DISTINCT a.ASSN As Association, SUM(tonnage_adjusted) as NotMonitored   
From DeliveryTons d INNER JOIN ReapingGroups a ON d.reaping_code = a.REAPING_GROUP_CODE 
WHERE remarks = 'NO_TICKET' AND reaping_code IS NOT NULL 
Group By a.ASSN 
ORDER BY Association 
+0

百分率列の式は何ですか?また、どのバージョンのSQL Serverを使用していますか? – Sparrow

+0

監視されているものを総トン数100で割った値にする必要があります。Microsoft SQL Server 2008 – ivias

答えて

1

これは機能するはずです。

With Summary as (
    Select a.ASSN As Association 
      ,SUM(tonnage_adjusted) as TotalTonnage 
      ,SUM(case when remarks = '' THEN tonnage_adjusted ELSE NULL END) as Monitored 
      ,SUM(case when remarks = 'NO_TICKET' THEN tonnage_adjusted ELSE NULL END) as NotMonitored 
    From DeliveryTons d 
    INNER JOIN ReapingGroups a 
    ON d.reaping_code = a.REAPING_GROUP_CODE 
    WHERE d.reaping_code IS NOT NULL 
    Group By a.ASSN 
    ) 

SELECT Association 
     ,TotalTonnage 
     ,Monitored 
     ,NotMonitored 
     ,((Monitored/TotalTonnage) * 100) as pct_Monitored 
    FROM Summary 
    Order by Association 
+0

を使用しています。「ORDER」というキーワードの近くに誤った構文が表示されています。 – ivias

+0

かっこですか?私は編集しましたが、テストすることはできませんので、何が原因なのかはわかりません。 –

+0

アソシエーション、TotalTonnage、Monitoredなどの無効な列名が無効で、無効な構文が 'Order'の近くにあり、無効な列名がアソシエーションの最下部に表示されます。 – ivias