这是我在SQL DBX中执行的查询。但是我想在这个不起作用的查询中减去。我想减去actual_amount
和Depri
。
但是我的查询不起作用:
SELECT
b.bank_v_id
,a.venumber
,b.recept_date
,b.dayly_amount
,b.actual_amount
,(DATEDIFF(b.recept_date,'2015-03-09')*b.dayly_amount) "Depri"
FROM
bank_vehicle_master a, tax_details b
WHERE
a.bank_v_id = b.bank_v_id
AND a.del_rec = 0
AND b.del_rec = 0
ORDER BY
a.bank_v_id
输出:
bank_v_id venumber recept_date dayly_amount actual_amount Depri
3 MH 07 Q 1313 17-12-2014 300 30000 -24600
4 MH 07 Q 1414 16-12-2014 150 15000 -12450
5 MH 07 Q 1555 16-12-2014 160 16000 -13280
我希望在上面减去两列,即减去actual_amount
和Depri
。
如何编写查询?
答案 0 :(得分:1)
参考别名而不是重写整个公式肯定是好的做法。使维护更容易。为此,您需要将减法移动到外部查询,否则您无法在查询的SELECT子句中引用别名。
NoDisplayName的另一个答案也是关于使用INNER JOIN
而不是旧的逗号样式连接的一个非常好的观点。
这样的事情:
SELECT bank_v_id,
venumber,
recept_date,
dayly_amount,
actual_amount
Depri,
actual_amount-Depri AS actualMinusDepri
FROM (
SELECT b.bank_v_id,
a.venumber,
b.recept_date,
b.dayly_amount,
b.actual_amount,
DATEDIFF(b.recept_date,'2015-03-09')*b.dayly_amount AS Depri
FROM bank_vehicle_master a
INNER JOIN tax_details b ON a.bank_v_id=b.bank_v_id
WHERE a.del_rec=0 AND b.del_rec=0
) AS t
ORDER BY bank_v_id
答案 1 :(得分:1)
在减法中直接使用DateDiff
部分。
还使用正确的INNER JOIN
语法而不是逗号分隔的连接,这是不可读的。
SELECT b.bank_v_id,
a.venumber,
b.recept_date,
b.dayly_amount,
b.actual_amount,
( Datediff(b.recept_date, '2015-03-09') * b.dayly_amount ) Depri,
b.actual_amount - ( Datediff(b.recept_date, '2015-03-09') * b.dayly_amount ) AS Subtraction
FROM bank_vehicle_master a
INNER JOIN tax_details b
ON a.bank_v_id = b.bank_v_id
WHERE a.del_rec = 0
AND b.del_rec = 0
ORDER BY a.bank_v_id