Sql 乘法列
下面我有一个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] >
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语句之后指定列,那个么我就有语法错误