如何在同一个表中减去一列和一个别名?

时间:2015-03-24 05:32:10

标签: sql

这是我在SQL DBX中执行的查询。但是我想在这个不起作用的查询中减去。我想减去actual_amountDepri

但是我的查询不起作用:

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_amountDepri

如何编写查询?

2 个答案:

答案 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