我是 SQL 新手,我尝试创建 CTE,但在 AS 下出现红色曲线,并且在执行语法的过程中收到错误消息:
消息 102,级别 15,状态 1,第 117 行“)”附近的语法不正确。
这是 SQL 语法,任何帮助都会很棒:
WITH CTE_Grand_Harvest_Total AS (
SELECT
zardi, COUNT(zardi) AS Count_ZARDI, SUM(Weight) AS Sum_Weight, Total_Harvest, Total_Harvest*COUNT(zardi)*SUM(Weight) AS Grand_Total
FROM
S1_PH_CROPS_clean_final_minus_money_matters
WHERE
Work.dbo.S1_PH_CROPS_clean_final_minus_money_matters.cropNamePH = 'Maize'
GROUP BY
Total_Harvest, zardi
)
Run Code Online (Sandbox Code Playgroud)
CTE(公用表表达式)实际上只是SELECT
语句的一部分。这是您在实际SELECT
数据之前定义的内容。在实际从数据子集(从 CTE)检索数据之前,您可以将其视为一种数据预选。
您可以在解释该声明的 Microsoft Learn 文章中看到这一点SELECT
:
<SELECT statement> ::=
[ WITH { [ XMLNAMESPACES ,] [ <common_table_expression> [,...n] ] } ] -- <== The CTE bit
<query_expression>
[ ORDER BY <order_by_expression> ]
[ <FOR Clause>]
[ OPTION ( <query_hint> [ ,...n ] ) ]
<query_expression> ::=
{ <query_specification> | ( <query_expression> ) }
[ { UNION [ ALL ] | EXCEPT | INTERSECT }
<query_specification> | ( <query_expression> ) [...n ] ]
<query_specification> ::=
SELECT [ ALL | DISTINCT ] -- <======== ACTUAL START OF A STANDARD SELECT
[TOP ( expression ) [PERCENT] [ WITH TIES ] ]
< select_list >
[ INTO new_table ]
[ FROM { <table_source> } [ ,...n ] ]
[ WHERE <search_condition> ]
[ <GROUP BY> ]
Run Code Online (Sandbox Code Playgroud)
参考:
SELECT (Transact-SQL) (Microsoft Learn)
WITH common_table_expression (Transact-SQL) (Microsoft Learn)
您必须从 CTE 中选择数据,类似于:
<SELECT statement> ::=
[ WITH { [ XMLNAMESPACES ,] [ <common_table_expression> [,...n] ] } ] -- <== The CTE bit
<query_expression>
[ ORDER BY <order_by_expression> ]
[ <FOR Clause>]
[ OPTION ( <query_hint> [ ,...n ] ) ]
<query_expression> ::=
{ <query_specification> | ( <query_expression> ) }
[ { UNION [ ALL ] | EXCEPT | INTERSECT }
<query_specification> | ( <query_expression> ) [...n ] ]
<query_specification> ::=
SELECT [ ALL | DISTINCT ] -- <======== ACTUAL START OF A STANDARD SELECT
[TOP ( expression ) [PERCENT] [ WITH TIES ] ]
< select_list >
[ INTO new_table ]
[ FROM { <table_source> } [ ,...n ] ]
[ WHERE <search_condition> ]
[ <GROUP BY> ]
Run Code Online (Sandbox Code Playgroud)
那么您就符合SELECT
和 CTE 定义。