SQL 中的 CTE 语法帮助

Chr*_*e K 3 sql-server cte

我是 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)

Joh*_* N. 6

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 定义。