需要向SQL查询添加if语句以获得不同的值

时间:2018-11-27 13:31:39

标签: sql if-statement inner-join

我编写了一个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,则最终结果将打印每种票证类型的最高和最低价格。如何添加此if语句?有人可以帮我吗?

谢谢

3 个答案:

答案 0 :(得分:1)

首先,我不会仅仅为了找到最小值和最大值而进行内部联接,您可以为此使用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

您可以使用CASE WHEN

来做“ IF”语句

在您的情况下,会是这样

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

答案 1 :(得分:0)

假设所有其他字段都在表“票证”中,则可以使用:

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

答案 2 :(得分:0)

假设您在另一张桌子和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

如果您使用同一张表,请删除联接:)