2016-11-23 14 views
3

私はレポートを作成しましたが、あなたにとって非常に簡単なハードルで停止しましたが、問題を解決する方法については考えられません。条件付きのWHEREパラメータによる

私はそのようによってパラメータする必要があります(複数のCTEとの)SQLクエリに基づいてレポート作成しました:

where 
deliverydate between @FromDate and @ToDate 
and 
carrierid = @Carrier 

をそして、それは、これまで取り組んでいます。しかし、私は3つの値を持つ別のパラメータを作成したい。これらの値に応じて、条件を満たすすべてのレコードを取得したいと考えています。みかんのようなもの:とき、パラメータ値= 3

  1. = 1パラメータ値が、私は時にパラメータ値は= 2
  2. すべてのレコードを取得したい、私はその後、カラム1 <> COLUMN2
  3. すべてのレコードをしたいです私はすべてのレコードを取得します。 column1 = column2

Column1とColumn2は、作成したレポートの列です。そのような 最終選択ルックス:

SELECT SALESID , 
     CARRIERID , 
     dlvmodeid , 
     SUM(totalweight) AS totalweight , 
     SUM(totalcharges) AS totalcharges , 
     TOTALCHARGESCURRENCY , 
     SUM(HowManyPackagesForThisSO) AS HowManyPackagesForThisSO , 
     SUM(HowManyPackagesForThisSO_st) AS HowManyPackagesForThisSO_st , 
     SUM(InHowManyDays) AS InHowManyDays , 
     SUM(cspjnumber) AS HowManyPackingSlip 
FROM countingcte 
WHERE deliverydate BETWEEN @FromDate AND @ToDate 
     AND carrierid = @Carrier 
GROUP BY SALESID , 
     CARRIERID , 
     dlvmodeid , 
     TOTALCHARGESCURRENCY 

誰もが私の問題の解決策を知っていますか?

私が心に留めている正確な列は、HowManyPackagesForThisSOとHowManyPackagesForThisSO_stです。

答えて

3

あなたWHERE節にこれを追加します。

AND ((@Param = 1) OR 
    (@Param = 2 AND col1 <> col2) OR 
    (@Param = 3 AND col1 = col2)) 
+0

それは働きました!私の問題を読んで解決するために犠牲にされた時間と助けをありがとう、] – M3How