нужно добавить оператор if в SQL-запрос, чтобы получить другое значение - PullRequest
0 голосов
/ 27 ноября 2018

Я написал SQL-запрос, чтобы получить максимальную и минимальную цену для каждого типа билета, как показано ниже

select A.ticket_type,C.min_price, B.max_price 
     from ticket 
     as A inner join (select ticket_type, max(original_price) as max_price
     from ticket group by ticket_type) B 
     inner join (select ticket_type, min(original_price) 
     as min_price from ticket group by ticket_type) C 
     on A.ticket_type=B.ticket_type 
     AND B.ticket_type=C.ticket_type 
     AND A.original_price=B.max_price

Теперь мне нужно добавить discount_price, discount_from и discount_to к этому запросу.Это означает, что если сегодня значение находится между discount_from и discount_to, цена получит discount_price, в противном случае получит original_price, тогда в конечном результате будет напечатана максимальная и минимальная цена для каждого типа билетов.Как добавить это, если заявление в?Кто-нибудь может помочь мне с этим?

Спасибо

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Во-первых, я бы не стал выполнять внутренние объединения, просто чтобы найти минимальное и максимальное значения, для этого можно использовать group by:

select T.ticket_type,min(T.original_price) min_price, max(T.original_price), mxn_price
 from ticket as T
 group by T.ticket_type

Вы можете сделать оператор «IF», ​​используя CASE WHEN

В вашем случае это было бы что-то вроде этого

select 
T.ticket_type,
min(T.original_price) min_price, 
max(T.original_price) max_price, 
CASE (WHEN GETDATE() BETWEEN discount_from AND discount_to) 
THEN MIN(T.discount_price) 
ELSE MIN(T.original_price) END price
from ticket as T
group by T.ticket_type
0 голосов
/ 27 ноября 2018

Предполагая, что у вас есть скидка на отдельном столе и SQL SERVER

WITH c1 AS (
SELECT ticket_type, CASE WHEN DATEDIFF(d,discount_from,GETDATE())>-1
                          AND DATEDIFF(d,GETDATE(),discount_to)  >-1 THEN  discount_price 
                         ELSE original_price END AS original_price 
FROM ticket t 
JOIN discount d ON t.ticketType=d.ticketType
)
SELECT c1.ticket_type,MIN(original_price),MAX(original_price)
FROM c1
GROUP BY ticket_type

Если вы используете ту же таблицу, удалите объединение :)

0 голосов
/ 27 ноября 2018

Предполагая, что все дополнительные поля находятся в таблице "ticket", это может сработать:

SELECT A.ticket_type, C.min_price, B.max_price 
FROM ticket A 
INNER JOIN (SELECT ticket_type, 
               CASE WHEN ( discount_from <= CURDATE() AND CURDATE() <= discount_to ) 
                    THEN max(discount_price) 
                    ELSE max(original_price)
               END  AS max_price
               FROM ticket GROUP BY ticket_type) B 
INNER JOIN (SELECT ticket_type,
              CASE WHEN ( discount_from <= CURDATE() AND CURDATE() <= discount_to ) 
                    THEN min(discount_price) 
                    ELSE min(original_price)
               END  AS min_price
               FROM ticket GROUP BY ticket_type) C

ON       A.ticket_type = B.ticket_type 
     AND B.ticket_type = C.ticket_type 
     AND A.original_price = B.max_price
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...