我正在尝试根据目的地(DEST)选择费用。如果国家不存在成本,那么我必须找到大陆,如果大陆也不存在成本,那么我根据其他人(目的地)选择。
SELECT SUM(CD.COST+CW.COST) AS TOTAL_COST
FROM SHIP_COST_BY_DEST CD
INNER JOIN SHIP_COST_BY_WEIGHT CW
ON CD.PROD_CODE = CW.PROD_CODE
WHERE IF((SELECT UPPER(CD.DEST) FROM SHIP_COST_BY_DEST),
(UPPER(CD.DEST) = UPPER('Others')),
(IF((SELECT UPPER(CD.DEST) FROM SHIP_COST_BY_DEST
WHERE UPPER(CD.DEST)=UPPER('India')),
UPPER(CD.DEST) = UPPER('India'),'Asia')))
任何人都可以帮助我
答案 0 :(得分:0)
这是一个非常复杂的WHERE子句 - 维持这将是一场噩梦。但问题是你的一个子查询(括号内的选择)返回多个值,逻辑不允许这样做。你最容易做的事情(因为我没有你的数据)是分别运行每个子查询,看看哪个返回多个值,看看它在那个地方是否合乎逻辑。
例如,你不能说
Name = (SELECT Name FROM AllCustomers)
因为名称不能同时将所有这些名称等同。但是,您可以说
Name IN (SELECT Name FROM AllCustomers)
因为它为您提供了一个可能的IN列表。此外,您需要确保所有子查询不仅仅在适当时返回一个答案,而且它们只能返回一个答案,或者当数据不同于数据时,您最终会遇到生产问题你用。测试过。