2016-02-18 104 views
3

我认为这是最好的给你看,他先查询:选择从同一个表相同的数据只是为不同列条件

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

提前感谢!

+0

哪些表/架构? – Stidgeon

+0

我认为最好的方法是展示数据集和期望的结果。 – Strawberry

回答

6

您只需在这里使用CASE声明。无需子查询和自连接:

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

谢谢!我不知道这件事。大!像火箭一样加快查询速度! – Jonathan

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; 
+0

也感谢你! – Jonathan

相关问题