Sql server 如何筛选嵌套查询中的记录,然后从筛选结果中选择同一表中的其他列?
首先,我想在两个嵌套查询(基于用户输入的参数@Borough和@WOEntity)中过滤并仅选择objectid,然后将同一个表中的列(类型和优先级)连接回最精细的记录集。这样做的目的是提高SSRS报告背后的存储过程的性能 我收到以下错误消息: 味精156,第15级,状态1,第13行Sql server 如何筛选嵌套查询中的记录,然后从筛选结果中选择同一表中的其他列?,sql-server,join,reporting-services,parameters,nested-query,Sql Server,Join,Reporting Services,Parameters,Nested Query,首先,我想在两个嵌套查询(基于用户输入的参数@Borough和@WOEntity)中过滤并仅选择objectid,然后将同一个表中的列(类型和优先级)连接回最精细的记录集。这样做的目的是提高SSRS报告背后的存储过程的性能 我收到以下错误消息: 味精156,第15级,状态1,第13行 关键字“SELECT”附近的语法不正确 味精102,第15级,状态1,第36行 “')附近的语法不正确 到目前为止,我的查询如下所示: declare @Borough int declare @WOEntityI
关键字“SELECT”附近的语法不正确 味精102,第15级,状态1,第36行
“')附近的语法不正确 到目前为止,我的查询如下所示:
declare @Borough int
declare @WOEntityINT int = NULL --0, 1, 3, 4, 11, 10, NULL
set @Borough = 1
set @WOEntityINT = 1
SELECT
B.OBJECTID, WO.Type, WO.Priority
FROM
CFAdmin.WorkOrder_EVW as WO
WHERE
B.OBJECTID = WO.OBJECTID
(
SELECT A.ObjectID
FROM
(SELECT
ObjectID,
CASE
WHEN WOEntity = 0 THEN 0 -- In-House
WHEN WOEntity IN (1, 2) THEN 1 -- Contract
WHEN WOEntity IN (3, 4) THEN 3 -- Utility
WHEN WOEntity IN (5, 6) THEN 4 -- Permitted
WHEN WOEntity IS NULL THEN 10 -- No Entity
ELSE 11 --11 = Other
END AS WOEntityINT
FROM
CFAdmin.WorkOrder_EVW
WHERE
(Status NOT IN (1, 2)) AND
(Borough IN (@Borough))) AS A
WHERE
(@WOEntityINT IS NULL OR (WOEntityINT = @WOEntityINT)) --field WOEntityINT is a derived field
) AS B
您的查询必须与模式匹配:
从何处选择
。我的意思是,您可以重新排序条款:
SELECT B.OBJECTID, WO.Type, WO.Priority
FROM CFAdmin.WorkOrder_EVW as WO
INNER JOIN (
SELECT A.ObjectID
FROM
(
SELECT
ObjectID,
CASE
WHEN WOEntity = 0 THEN 0 -- In-House
WHEN WOEntity IN (1,2) THEN 1 -- Contract
WHEN WOEntity IN (3,4) THEN 3 -- Utility
WHEN WOEntity IN (5,6) THEN 4 -- Permitted
WHEN WOEntity IS NULL THEN 10 -- No Entity
ELSE 11 --11 = Other
END AS WOEntityINT
FROM CFAdmin.WorkOrder_EVW
WHERE
(Status not in (1,2)) AND
(Borough IN (@Borough))
) AS A
WHERE (@WOEntityINT IS NULL OR (WOEntityINT = @WOEntityINT)) --field
WOEntityINT is a derived field
) AS B
on B.OBJECTID = WO.OBJECTID
请记住,您可以编写CTE以提高可读性:
WITH a AS
(
SELECT objectid,
CASE
WHEN woentity = 0 THEN 0 -- In-House
WHEN woentity IN (1,2) THEN 1 -- Contract
WHEN woentity IN (3,4) THEN 3 -- Utility
WHEN woentity IN (5,6) THEN 4 -- Permitted
WHEN woentity IS NULL THEN 10 -- No Entity
ELSE 11 --11 = Other
END AS woentityint
FROM cfadmin.workorder_evw
WHERE (
status NOT IN (1,2))
AND (
borough IN (@Borough)) )
, b AS
(
SELECT a.objectid
FROM a
WHERE (
@WOEntityINT IS NULL
OR (
woentityint = @WOEntityINT)) --field
woentityint IS a derived field
)
SELECT b.objectid,
wo.type,
wo.priority
FROM cfadmin.workorder_evw AS wo
INNER JOIN b
ON b.objectid = wo.objectid
免责声明:这只是一个开始调试和隔离问题的建议。我想,在这些变化之后,你会发现新的问题。请不要在这篇文章中询问新问题。当您开始删除代码时,您何时会停止收到该消息?您不能使用包含B列名称的FROM和WHERE for select查询。因为它是一个命名查询,并且包含了它需要封装的所有内容。。(代码)为B。如果您尝试再次加入WO。您必须在“as B”之后通过左侧或内部执行此操作,并使用您在“as B”From where子句中放置的条件。