【问题标题】:SELECT same data from same table just with conditions as different columns从同一个表中选择相同的数据,只是条件作为不同的列
【发布时间】:2016-02-18 18:19:34
【问题描述】:

我认为最好先向你展示他的查询:

    SELECT 
    Positive.Amount AS PosAmount, 
    Negative.Amount AS NegAmount, 
    booking.Correction
FROM (booking)
LEFT JOIN ( SELECT ID, Amount FROM booking WHERE Amount < 0 ) 
    AS Negative ON booking.ID = Negative.ID
LEFT JOIN ( SELECT ID, Amount FROM booking WHERE Amount > 0 ) 
    AS Positive ON booking.ID = Positive.ID

我在这里想要达到的目标如下。我希望每次预订的金额取决于它在不同列中是正数还是负数。这可能以另一种更便宜的方式实现吗?我的意思是,将一个表连接到自身并不是最好的方法,不是吗?

表格如下:

而想要的结果是这样的:

提前致谢!

【问题讨论】:

  • 表/模式是什么?
  • 我认为最好显示数据集和期望的结果。

标签: mysql sql database innodb


【解决方案1】:

您只需要在此处使用CASE 语句。不需要子查询和自联接:

SELECT
    CASE WHEN amount > 0 THEN amount END as posAmount,
    CASE WHEN amount < 0 THEN amount END as negAmount,
    correction
FROM booking

【讨论】:

  • 谢谢!我不知道这件事。伟大的!像火箭一样加快查询速度!
【解决方案2】:

我不太确定你想要什么。也许是聚合:

SELECT SUM(CASE WHEN Amount > 0 THEN b.Amount ELSE 0 END) as PosAmount, 
       SUM(CASE WHEN Amount < 0 THEN b.Amount ELSE 0 END) as NegAmount, 
       b.Correction
FROM booking b
GROUP BY b.correction;

也许它只是两个不同的列:

SELECT (CASE WHEN Amount > 0 THEN b.Amount ELSE 0 END) as PosAmount, 
       (CASE WHEN Amount < 0 THEN b.Amount ELSE 0 END) as NegAmount, 
       b.Correction
FROM booking b;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-24
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多