2017-05-31 3 views
0

私のパラメータの1つとして、CASE文(下記)を使用して "NetSalesRange"というパラメータ値を設定するNetSalesという名前のデータセットのクエリ結果を使用しています。ただし、値(500,600,700など)を選択すると、選択した値ではなく、すべての結果がレポートに表示されます。すべての結果を言いますと、WHERE条件を満たすすべての結果を意味します。これは正しいですが、私はWHERE条件の結果のみを必要とし、条件用に選択された "NetSalesRange"に絞っています。これは、ユーザーが選択した範囲内で正味の売上を選択して表示できるようにするためです。その他$ 500 $ 600($ 500- $ 599含まれます)、$ 700($ 600〜$ 699含まれます)($ 700〜$ 799含まれます)、Visual Studio 2013 - CASE文のクエリ結果をパラメータ値として使用

SELECT 
NetSalesRange, count(*) Total 
from(select 
CASE 
WHEN [NetSales] * - 1 < 300 THEN '< 300' 
WHEN [NetSales] * - 1 >= 300 AND [NetSales] * - 1 <= 399.99 THEN '300' 
WHEN [NetSales] * - 1 >= 400 AND [NetSales] * - 1 <= 499.99 THEN '400' 
WHEN [NetSales] * - 1 >= 500 AND [NetSales] * - 1 <= 599.99 THEN '500' 
WHEN [NetSales] * - 1 >= 600 AND [NetSales] * - 1 <= 699.99 THEN '600' 
WHEN [NetSales] * - 1 >= 700 AND [NetSales] * - 1 <= 799.99 THEN '700' 
WHEN [NetSales] * - 1 >= 800 AND [NetSales] * - 1 <= 899.99 THEN '800' 
WHEN [NetSales] * - 1 >= 900 AND [NetSales] * - 1 <= 999.99 THEN '900' 
ELSE '> 1000' 
END AS NetSalesRange 
FROM CompanyDW.Customer AS b INNER JOIN 
    CompanyDW.Payments AS p ON b.OrderID = p.OrderID AND 
    p.PaymentTypeID IN ('CA', 'CK', 'CC') 
     INNER JOIN CompanyDW.Store AS s ON b.StoreID = s.StoreID 
WHERE (b.Voided IN ('NS', 'NT')) AND 
    (b.Trans IN ('53', '64', '76')) AND (NOT (b.Status = 'V')) AND 
(CAST(b.TransDate AS DATE) BETWEEN @Startdate and @Enddate) AND 
(b.NetSales * - 1 >= 500) 
) d 
GROUP BY NetSalesRange 
ORDER BY NetSalesRange 

答えて

0

理想的には、あなただけの必要な行を選択するSQL文を適応させるだろうwhereステートメントでは、全体のSQLステートメントを外側のステートメントの内側に置いてフィルタを作成することから始めることができます。

内側のステートメントでの順序を削除します。

+0

ありがとうございます。 – Traviss

関連する問題