【发布时间】:2016-04-23 17:21:13
【问题描述】:
我有以下数据。
输出:
id cid price sold
--------------------
1 1 10 20
2 1 30 40
3 2 50 60
我需要的是这个:
id cid Amount
--------------
1 1 20
2 1 10
3 2 30
如果id = cid 则按其他金额出售
如果id != cid,那么对于cid的匹配id的价格作为金额(请参考上面的输出,如果它是混乱的!)
我有以下 SQL 查询:
declare @tg table(id int, cid int, price int, sold int)
insert into @tg values(1, 1, 10, 20);
insert into @tg values(2, 1, 30, 40);
insert into @tg values(3, 2, 50, 60);
SELECT
id, cid,
CASE WHEN id = cid
THEN sold
WHEN B.id IN (SELECT
CASE WHEN id != cid
THEN cid
END AS cid1
FROM @tg A
WHERE A.cid = B.id)
THEN price
END as amount
FROM
@tg AS B
--OR
select
id,cid,
CASE WHEN id = cid THEN sold else price END as amount from @tg
as B
id != cid 时不起作用。
【问题讨论】:
-
这是一个case表达式,不是case语句...
-
@jarlh 谢谢 :) 现在知道 CASE 表达式和语句之间的区别。不同之处在于该语句以 END CASE 语句结束,而不仅仅是 END。 PL/SQL 语句本质上是 IF .. THEN .. ELSIF 语句列表的替代方案。 (oracle-base.com/articles/9i/case-expressions-and-statements-9i)
-
并且case表达式有返回值,而case语句只是代码的条件执行。
标签: sql sql-server oracle oracle11g