Sql 乘法列

Sql 乘法列,sql,sql-server,Sql,Sql Server,下面我有一个sql脚本 SELECT InvoiceNo ,InvoiceType ,Amount ,OrderAmount ,ShippingAmount ,TruckTaxAmount ,PreShippingAmount FROM truckdb AS t1 INNER JOIN truckdetails AS t2 ON tl.truckdetail = t2.truckid WHERE [shipping date] >

下面我有一个sql脚本

SELECT
     InvoiceNo
    ,InvoiceType
    ,Amount
    ,OrderAmount
    ,ShippingAmount
    ,TruckTaxAmount
    ,PreShippingAmount
FROM truckdb AS t1
INNER JOIN truckdetails AS t2 ON tl.truckdetail = t2.truckid
WHERE [shipping date] > = '01-01-2011'
和样本数据

+--------+-------------+---------+-------------+----------------+------------+----------+
| InvNo  | InvoiceType | Amount  | OrderAmount | ShippingAmount | TruckTxAmt | PreShAmt |
+--------+-------------+---------+-------------+----------------+------------+----------+
|    001 | ckt         |    1200 |         544 |            666 |         23 |       11 |
|    002 | tkp         |    1300 |         544 |            133 |         11 |       11 |
|    009 | ckt         |    1222 |         221 |            122 |        221 |      566 |
+--------+-------------+---------+-------------+----------------+------------+----------+

我有几种发票类型。我想用负数显示一个特定的CKT发票类型-金额、订单金额、发货金额、卡车运输金额。我尝试在where子句之后使用when语句进行乘法。但有点不对劲

您需要在SELECT子句中使用CASE,而不是在WHERE子句之后:

SELECT 
...
CASE WHEN InvoiceType='CKT' THEN Amount * -1.00 ELSE Amount END AS Amount,
CASE WHEN InvoiceType='CKT' THEN OrderAmount * -1.00 ELSE OrderAmount END AS OrderAmount,
(etc)
...
FROM ...
谢谢,@Tab Alleman

SELECT ... CASE WHEN InvoiceType='CKT' THEN Amount * -1.00 ELSE    Amount END AS Amount, 
      CASE WHEN InvoiceType='CKT' THEN OrderAmount * -1.00 ELSE OrderAmount END AS 
          OrderAmount, (etc) ... FROM ...    ------------------------------------------------------------------------

示例数据和期望的结果将非常有用。请考虑使用ANSI标准YYYYMMD格式进行日期。您拥有的字符串不明确,仅通过更改数据库的语言就可能被错误解释。欢迎使用堆栈溢出。你的问题没有包含足够的细节,我们无法帮助你。请花一点时间阅读这两个链接,然后考虑编辑你的问题,如果你还在寻求帮助。我确实这样做了,但是我有更多的专栏,我想在where子句之后添加这个逻辑,看看上面的代码,我告诉你,“在where子句之后”是添加这个逻辑的错误位置。你不能在那里做。你必须按照我在回答中的方式去做。为什么你认为你想在WHERE子句之后这样做?我认为OP对WHERE子句的作用感到困惑。它用于筛选返回的行。可以使用select子句定义结果集中的列。这就是你在这里要做的,不是过滤掉行。我有weir的结果。只是在输出中显示金额列。若我在select语句之后指定列,那个么我就有语法错误