【发布时间】:2021-10-08 13:13:56
【问题描述】:
以下查询我无法将公用表表达式选择值插入另一个表。
;WITH cte AS
(
SELECT
rd.reorderhistoryId,
rd.dateCreated,
rd.personId,
rd.reorderId,
rd.statusNo,
rd.createdBy,
r.OrganizationId
FROM
(SELECT
MIN(reorderhistoryId) AS reorderhistoryId,
MIN(personId) AS personId,
reorderId
FROM
reorderHistoryDetails
GROUP BY
reorderId) rh
INNER JOIN
reorderHistoryDetails rd ON rd.reorderhistoryId = rh.reorderhistoryId
INNER JOIN
reorderDetails r ON r.personId = rd.personId
WHERE
rd.statusNo = 1059
)
SELECT DISTINCT TOP 5
rlst.personId AS personId,
'Start Reorder Process' AS reorderStatusType,
1 AS productId,
3 AS amountPaid,
rlst.reorderId,
rlst.OrganizationId AS orgId,
rlst.createdBy,
rlst.dateCreated,
rlst.dateCreated AS timeStamp
FROM
cte rlst
INNER JOIN
doctororderall d ON rlst.personId = d.personId
AND d.productId = 1
AND YEAR(rlst.dateCreated) = YEAR(d.dateCreated)
INNER JOIN
patientdetails pd ON pd.personId = d.personId
WHERE
rlst.datecreated > '2020-09-01'
AND rlst.dateCreated <= '2021-10-06'
INSERT INTO rouletteTracking (personId, reorderStatusType, productId,
amountPaid, reorderId, orgId,
createdBy, dateCreated, timeStamp)
SELECT *
FROM cte
我收到此错误:
消息 208,第 16 级,状态 1,第 14 行
无效的对象名称“cte”。
【问题讨论】:
-
1.空格和换行符是“神奇”的东西;这使您可以阅读的那些不可读的代码块。 2. 分号 (
;) 是语句终止符,它们位于所有语句的末尾,而不是需要的语句的开头上一个 语句被正确终止。 3.顾名思义(Common Table Expression),一个CTE就是一个表达式;如果它没有在语句中定义,则它不存在于语句的范围内。 CTE 未在您的第二个语句中定义,因此它不存在。 -
先生,请问有什么解决方案。 @Larnu
-
我的暗示;在语句中定义 CTE。或者,或者,将数据插入(临时)表,然后从该表中插入
SELECT和INSERT。 -
sir CTE 数据不为空,请问哪个语句可以给我需要修改的行。 @Larnu
-
我没有说 CTE 是空的,我说它没有定义。 CTE 显然不会导致空结果,因为您的第一个查询返回 5 行。问题是您稍后尝试在声明中引用该 CTE,但正如我所提到的,您尚未(再次)定义该 CTE,因此您会收到错误。正如我自己和格兰特在他们的回答中所说,提示就在名称中:Common Table Expression。
标签: sql sql-server