【发布时间】:2015-08-16 10:19:29
【问题描述】:
请查看查询。
我面临的问题是:
THEN 子句中的 FROM_LOCATION,TO_LOCATION 需要是 B_TARIFFS 中的值,但是当我在它前面加上 B_TARIFFS.FROM_LOCATION 和 B_TARIFFS.TO_LOCATION 时,我收到一个错误 @987654323 @。
如果它在ELSE 子句中可用,那么为什么我不能在THEN 子句中使用它。我该怎么做才能得到我想要的结果。
我想从查询中得到的结果是:Get from_location,to_location,关税(基于另一个表中的案例)。我期望外部查询将其 FROM_LOCATION,TO_LOCATION 传递给CASE ELSE THEN 中的内部选择查询,并基于此返回关税值,这将是外部查询的第三列。我能做些什么来实现这一目标。
select FROM_LOCATION, TO_LOCATION,
case when (
select tariff A_tariff where A_tariff.FROM_LOCATION = B_TARIFFS.FROM_LOCATION AND A_tariff.TO_LOCATION =
B_TARIFFS.TO_LOCATION AND TO_DATE(sysdate,'YYYY-MM-DD') between TO_DATE(from_date,'YYYY-MM-DD') and TO_DATE(to_date,'YYYY-MM-DD')
and rownum = 1
) = ''
then
(SELECT TARIFF FROM (
SELECT * FROM A_TARIFF WHERE TRIM(A_TARIFF.FROM_LOCATION) = TRIM(**FROM_LOCATION**) AND
TRIM(A_TARIFF.TO_LOCATION) = TRIM(**TO_LOCATION**) ORDER BY A_TARIFF.FROM_DATE DESC
) WHERE ROWNUM = 1)
else
(select tariff from A_tariff where A_tariff.FROM_LOCATION = B_TARIFFS.FROM_LOCATION AND A_tariff.TO_LOCATION =
B_TARIFFS.TO_LOCATION AND TO_DATE(sysdate,'YYYY-MM-DD') between TO_DATE(from_date,'YYYY-MM-DD') and TO_DATE(to_date,'YYYY-MM-DD')
and rownum = 1) end tariff
FROM B_TARIFFS
WHERE FROM_LOCATION LIKE '%ABC%' AND AREA_CODE = 'X' ORDER BY TARIFFS;
【问题讨论】:
标签: sql oracle select subquery case