繁体   English   中英

SQL 查询使用 Case When 语句和连接多个表不起作用

[英]SQL query with Case When statements and joining multiple tables not working

我有一个 select 语句,通过左连接涉及 3 个不同的表:预订、区域和机场。 在声明中,我试图获得预订价格和这些预订数量的总和。 这些预订必须符合案例条款中的要求。

这是我的查询:

SELECT 
  sum(CASE WHEN (dateType1 AND airport1) THEN com ELSE 0 END),
  count(dateType1 AND airport1),
  sum(CASE WHEN (dateType2 AND airport2) THEN com ELSE 0 END),
  count(dateType2 AND airport2)
  FROM (
       SELECT ((a.price * a.effektor)/100) AS com,
       CASE WHEN ((a.booking_date >= '2022-03-01T00:00' AND a.booking_date <= '2022-03-31T23:59:59')) THEN TRUE END dateType1,
       CASE WHEN (ar.airport_id = 10) THEN TRUE END airport1,
       CASE WHEN ((a.booking_date >= '2022-03-01T00:00' AND a.booking_date <= '2022-03-31T23:59:59')) THEN TRUE END dateType2,
       CASE WHEN (ar.airport_id = 2) THEN TRUE END airport2
     FROM booking a
       LEFT JOIN area p ON a.areaid = p.areaid
       LEFT JOIN airport ar ON ar.airport_id = p.airport_id
       WHERE a.status != 'STO' AND p.areaid = 10459
) booking

不幸的是,查询抛出错误。
当我用ar.airport_id删除 case 子句时,

SELECT 
   sum(CASE WHEN dateType1 THEN com ELSE 0 END),
   count(dateType1),
   sum(CASE WHEN dateType2 THEN com ELSE 0 END),
   count(dateType2)
   FROM ( 
      SELECT ((a.price * a.effektor)/100) AS com,
      CASE WHEN ((a.booking_date >= '2022-03-01T00:00' AND a.booking_date <= '2022-03-31T23:59:59')) THEN TRUE END dateType1,
      CASE WHEN ((a.booking_date >= '2022-03-01T00:00' AND a.booking_date <= '2022-03-31T23:59:59')) THEN TRUE END dateType2    
        FROM booking a
           LEFT JOIN area p ON a.areaid = p.areaid
           LEFT JOIN airport ar ON ar.airport_id = p.airport_id
           WHERE a.status != 'STO' AND p.areaid = 10459
) booking

查询运行没有问题,我得到了一些结果。
为什么包含我需要的所有要求的第一个语句不起作用?

任何帮助是极大的赞赏。

我没有看到 dataType1 和 dateType2 之间的区别——这让我认为这可能是一个错误。 除此之外,我重新编写了这样的查询——应该找到。 如果您有一些示例数据,您可以证明这可能会有所帮助。

SELECT 
  sum(CASE WHEN dateType1 AND airport1 THEN com ELSE 0 END) AS type1sum,
  sum(CASE WHEN dateType1 AND airport1 THEN 1 ELSE 0 END) AS type1count,
  sum(CASE WHEN dateType2 AND airport2 THEN com ELSE 0 END) AS type2sum,
  sum(CASE WHEN dateType2 AND airport2 THEN 1 ELSE 0 END) AS type2count
  FROM (
    SELECT ((a.price * a.effektor)/100) AS com,
      CASE WHEN DATE(a.booking_date) = '2022-03-01' THEN TRUE ELSE FALSE END dateType1,
      ar.airport_id = 10 AS airport1,
      CASE WHEN DATE(a.booking_date) = '2022-03-01' THEN TRUE ELSE FALSE END dateType2,
      ar.airport_id = 2 AS airport2
    FROM booking a
    LEFT JOIN area p ON a.areaid = p.areaid
    LEFT JOIN airport ar ON ar.airport_id = p.airport_id
    WHERE a.status != 'STO' AND p.areaid = 10459
  ) booking

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM