2016-10-06 5 views
4

У меня есть запрос, в котором я пытаюсь использовать оператор case, ссылающийся на два столбца.Как ссылаться на несколько столбцов в аргументе case

данных:

Пользователи таблица:

ID_User  sUserName 
1    Test 
2    Test2 
3    Test3 

Клиенты таблице:

ID  last name  Redeemed  paid 
1   Cust1   10/1/16   9/15/16 
2   Cust2   9/16/16   9/14/16 
3   Cust3   10/4/16   9/30/16 
4   Cust4   10/5/16   10/1/16 

Запрос:

SELECT  Users.sUserName, Customers.LastName, CASE WHEN customers.Redeemed < '9/28/16' AND 
         customers.paid < '9/28/16' THEN '3' ELSE '4' END AS Amount 
FROM   Customers LEFT OUTER JOIN 
         Users ON Customers.lGreeterId = Users.ID_User 
WHERE  (Customers.Redeemed BETWEEN @startdate AND @enddate) 

Вывод запроса:

susername last name  amount 

Test  Cust1   4 
Test2  Cust2   4 
Test3  Cust3   4 
Test3  Cust4   4 

Вывод должен быть:

susername last name  amount 

Test  Cust1   3 
Test2  Cust2   3 
Test3  Cust3   4 
Test3  Cust4   4 

Почему я получаю результат "еще" для всех из них? Я хочу вернуть «3», если выкупленное будет меньше указанной даты. OR уплачено меньше указанной даты.

оплачиваемого и Redeemed оба типов данных datetime

ответ

2

После комментариев, попробуйте использовать другой формат даты в запросе

SELECT  Users.sUserName, Customers.LastName, 
      CASE 
      WHEN customers.Redeemed < '2016-09-28' THEN '3' 
      WHEN customers.paid < '2016-09-28' THEN '3' 
      ELSE '4' 
      END AS Amount 
FROM   Customers 
LEFT JOIN Users 
    ON Customers.lGreeterId = Users.ID_User 
WHERE  (Customers.Redeemed BETWEEN @startdate AND @enddate) 
+0

@jpw Основываясь на выходе, это то, что я думал, что OP клонит .. . – JohnHC

+0

Я ищу И, а не OR - – Shmewnix

+0

@Shmewnix, тогда это ваши типы данных, которые запрещены. – JohnHC

Смежные вопросы