不确定这是否可行,但我想根据某些条件在 IN 语句中指定一个选择查询。这是我的 SQL 查询:
SET @DepartmentId = (SELECT TOP 1 DepartmentId FROM Organisations WHERE OrganisationId = @OrgId)
CREATE TABLE #JustificationDetails
(
JustificationId INT,
Code VARCHAR(5),
AccCategory CHAR(2),
Description VARCHAR(200),
ActualTotals DECIMAL(18, 2),
CurrentTotals DECIMAL(18, 2),
FutureTotals DECIMAL(18, 2),
IncreaseDecreaseTotals DECIMAL(18, 2),
IncreaseDecreasePerc INT,
Justification VARCHAR(MAX)
)
INSERT INTO #JustificationDetails
SELECT
ISNULL(J.pkiJustificationId, 0),
RIGHT(A.AccountNumber, 5) AS AccVote,
LEFT(RIGHT(A.AccountNumber, 5), 2) AS AccCategory,
A.Description,
0, 0, 0, 0, 0,
ISNULL(J.JustificationReason, '''')
FROM
Accounts A
INNER JOIN
Notes_Line_Entries NLE ON A.AccountId = NLE.fkiAccountId
INNER JOIN
MasterBudgets MB ON NLE.budgetId = MB.BudgetId
INNER JOIN
Organisations O ON MB.OrganisationId = O.OrganisationId
LEFT JOIN
Justifications J ON O.OrganisationId = J.fkiOrganisationId
WHERE
fkiNotesColumnId = 3
AND O.OrganisationId IN (CASE
WHEN @DepartmentId = 2
THEN (SELECT OrganisationId FROM Organisations
WHERE ParentOrganisationId IN (SELECT OrganisationId
FROM Organisations
WHERE ParentOrganisationId IN (SELECT OrganisationId
FROM Organisations
WHERE ParentOrganisationId = @OrgId)))
WHEN @DepartmentId = 4
THEN (SELECT OrganisationId FROM Organisations
WHERE ParentOrganisationId IN (SELECT OrganisationId
FROM Organisations
WHERE ParentOrganisationId IN (SELECT OrganisationId
FROM Organisations
WHERE ParentOrganisationId = @OrgId)))
WHEN @DepartmentId = 3
THEN (SELECT OrganisationId
FROM Organisations
WHERE ParentOrganisationId IN (SELECT OrganisationId
FROM Organisations
WHERE OrganisationId = @OrgId))
WHEN @DepartmentId = 5
THEN (SELECT OrganisationId
FROM Organisations
WHERE ParentOrganisationId IN (SELECT OrganisationId
FROM Organisations
WHERE OrganisationId = @OrgId))
END)
GROUP BY
J.pkiJustificationId, A.Category, A.Description,
RIGHT(A.AccountNumber, 5), J.JustificationReason
ORDER BY
A.Category, RIGHT(A.AccountNumber, 5)
我收到以下错误:
子查询返回了 1 个以上的值。当子查询跟随 =、!=、<、<=、>、>= 或当子查询用作表达式时,这是不允许的。
如果我在 IN() 语句中只运行一个选择查询,那么它就可以工作,所以我只是假设这是不可能的?
谢谢你的帮助。
CASE 语句不能返回数据集,因此它不能与 IN 子句一起使用。
我认为你的代码逻辑可以这样写:
WHERE fkiNotesColumnId = 3 AND (
(
@DepartmentId IN (2, 4) AND
O.OrganisationId IN (
SELECT OrganisationId FROM Organisations
WHERE ParentOrganisationId IN (
SELECT OrganisationId FROM Organisations
WHERE ParentOrganisationId IN (
SELECT OrganisationId FROM Organisations
WHERE ParentOrganisationId = @OrgId
)
)
)
)
OR
(
@DepartmentId IN (3, 5) AND
O.OrganisationId IN (
SELECT OrganisationId FROM Organisations
WHERE ParentOrganisationId IN (
SELECT OrganisationId FROM Organisations
WHERE OrganisationId = @OrgId
)
)
)
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句