我在尝试使用DISTINCT
在SELECT
列表中,将CASE
语句放入ORDER BY
子句中,并发现了一些我无法理解的奇怪行为。以下是一些代码:
select distinct Requester, ISO_ID as ISO, (ISO_ID - 5 + 50) AS 'someNum', BU
from LoanerHeader order by
CASE WHEN 'a' = 'b' then Requester
when 'b' = 'c' then BU
else ISO_ID
end
这是可行的。但如果我将第四行改为
when 'b' = 'b' then BU
:select distinct Requester, ISO_ID as ISO, (ISO_ID - 5 + 50) AS 'someNum', BU
from LoanerHeader order by
CASE WHEN 'a' = 'b' then Requester
when 'b' = 'b' then BU
else ISO_ID
end
错误提示:
如果指定了SELECT DISTINCT,则ORDER BY项目必须出现在选择列表中。
当BU
明显在选择列表中时,就会出现这个错误。更奇怪的是,当我将代码更改为:
select distinct Requester, ISO_ID as ISO, (ISO_ID - 5 + 50) AS 'someNum', BU
from LoanerHeader order by
CASE WHEN 'a' = 'b' then Requester
when 'b' = 'b' then BU
else BU --change is here
end
它又能工作了!这怎么可能呢?有人可以帮我理解一下吗?
在技术层面上,我们需要进一步检查并诊断问题。
Requester
、BU
和ISO_ID
的数据类型是什么? - Martin SmithBU
或Requester
排序。我觉得你说的有点道理。 - Nick Rolando