我认为最好先告诉他他的问题:
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
我想在这里实现的目标如下。我希望每个预订的金额取决于它在不同列中是正数还是负数。这可能是另一种更便宜的方式吗?我的意思是加入一张桌子本身不是最好的方法,可以吗?
表格如下:
期望的结果是这样的:
提前致谢!
答案 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;