SELECT
outctc.year,
outctc.ctc,
outctc.gross,
(SELECT
(case when (COUNT(EMP_ID)>=1)then inrctc.ctc else outctc.ctc end)
FROM
employee_ctc inrctc
WHERE
inrctc.EMP_ID = outctc.EMP_ID
GROUP BY
inrctc.ctc,inrctc.EMP_ID)
FROM employee_ctc outctc
WHERE outctc.EMP_ID=100002
错误:
子查询返回的值超过1。这是不允许的 子查询跟随=,!=,<,< =,>,> =或当子查询用作 表达。
答案 0 :(得分:1)
当您在select中使用子查询时,预计只返回1个单行和一列。因此,如果您认为可能有多个行或列,并且您需要它们,那么您最好使用CTE或在连接或部分中使用子查询。
甚至你可以通过在选择中放置前1来简单地克服错误。
这里你得到错误,因为在Group BY部分,你给了2列,但在连接部分,只有一列。因此,在您的表employee_ctc中,可能有多个EMP_ID 100002
的记录您可以将剩余的列( inrctc.ctc )添加到联接中,也可以将其从组中删除
这可能对您有用:
select
outctc.year,
outctc.ctc,
outctc.gross,
CASE WHEN Q.ctc IS NOT NULL
THEN Q.ctc else outctc.ctc end
from employee_ctc outctc
OUTER APPLY
(
select
CTC = SUM(inrctc.ctc)
from employee_ctc inrctc
where inrctc.EMP_ID=outctc.EMP_ID
)Q
where outctc.EMP_ID=100002