![](/img/trans.png)
[英]SQL Query and case statement to show multiple entries by joining two tables
[英]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.