2016-11-23 10 views
3

Я создал отчет, но я остановился на препятствии, которое может быть очень простым для вас, но я не могу думать ни о каком методе, который позволил бы мне решить мою проблему.Условный ГДЕ в соответствии с параметром

Я создал отчет, основанный на SQL запросе (с несколько КТРОМ), которые должны быть параметризованным так:

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

И это работает до сих пор. Но я хочу создать еще один параметр, который будет иметь 3 значения. И в зависимости от этих значений я хочу получить все записи, которые будут соответствовать этому условию. Сорта так:

  1. , когда значение параметра = 1, то я хочу, чтобы получить все записи
  2. , когда значение параметра = 2, то я хочу каждую запись, где column1 <> column2
  3. , когда значение параметра = 3, то Я хочу получить каждую запись, где column1 = column2

Столбец1 и столбец2 являются столбцами из отчета, который я создал. Итоговые выберите выглядит следующим образом:

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