Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在同一个表中减去一列和一个alise?_Sql - Fatal编程技术网

Sql 如何在同一个表中减去一列和一个alise?

Sql 如何在同一个表中减去一列和一个alise?,sql,Sql,这是我在SQL DBX中执行的查询。但我想在这个查询中进行减法运算,但它不起作用。我想减去实际金额和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_veh

这是我在SQL DBX中执行的查询。但我想在这个查询中进行减法运算,但它不起作用。我想减去
实际金额
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


如何编写查询?

引用别名而不是重新编写整个公式肯定是一种很好的做法。使其更易于维护。为此,您需要将减法移到外部查询,否则无法在查询的SELECT子句中引用别名

NoDisplayName的另一个答案也很好地说明了如何使用
内部联接
,而不是旧的逗号式联接

比如说:

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

直接使用减法中的
DateDiff
部分

也要使用正确的
内部联接
语法,而不是不可读的逗号分隔联接

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 

-在ANSI-92 SQL标准(20多年前)中,旧样式的逗号分隔表列表样式被正确的ANSI
JOIN
语法所取代,它的使用不受欢迎。这是用于哪种RDBMS的?请添加一个标记,以指定您使用的是
mysql
postgresql
sqlserver
oracle
还是
db2
——或者其他完全不同的东西。