选择来自同一表的相同数据,条件为不同的列

时间:2016-02-18 18:19:35

标签: mysql sql database innodb

我认为最好先告诉他他的问题:

    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

我想在这里实现的目标如下。我希望每个预订的金额取决于它在不同列中是正数还是负数。这可能是另一种更便宜的方式吗?我的意思是加入一张桌子本身不是最好的方法,可以吗?

表格如下:

enter image description here

期望的结果是这样的:

enter image description here

提前致谢!

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:0)

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

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;