如何在SQL中使用“ With”子句创建表

用户名

我正在尝试使用WITH子句创建一个持久表,但是却出现了错误。

对于上下文,我目前找到的答案是

CREATE TABLE my_table
AS 
WITH my_tables_data AS ( 
   SELECT another_table.data1 AS some_value 
   FROM another_table
) 
SELECT * 
FROM some_data; 

但是,我收到一个错误

消息319,级别15,状态1,第5行关键字“ with”附近的语法错误。如果此语句是公用表表达式,xmlnamespaces子句或更改跟踪上下文子句,则前一条语句必须以分号终止。

我的代码是

CREATE TABLE SalesOrdersPerYear  
WITH t1 AS (
    -- Define the CTE expression name and column list.  
    WITH Sales_CTE (SalesPersonID, BaseSalary)  
    AS  
    -- Define the CTE query.  
    (  
        SELECT SALES_PERSON.SALES_PERSON_ID, SALES_PERSON.BASE_SALARY  
        FROM SALES_PERSON  
        WHERE SALES_PERSON_ID IS NOT NULL  
    )  
    -- Define the outer query referencing the CTE name.  
    SELECT SalesPersonID, BaseSalary AS TotalSales  
    FROM Sales_CTE   
    ORDER BY SalesPersonID, BaseSalary;  
)

有人可以为此提供一些指导吗?

提前谢谢了!

豆蛙

这对于SQL Server无效的语法。您可以使用CREATE TABLE并指定列名称和类型来创建表,也可以执行SELECT INTO包含数据语句。

方法1:创建表,然后填充:

CREATE TABLE SalesOrdersPerYear 
( SalesPersonID int, BaseSalary float)
;

WITH Sales_CTE (SalesPersonID, BaseSalary)  
AS  
(  
    SELECT SALES_PERSON.SALES_PERSON_ID, SALES_PERSON.BASE_SALARY  
    FROM SALES_PERSON  
    WHERE SALES_PERSON_ID IS NOT NULL 
)  
insert into SalesOrdersPerYear  
SELECT SalesPersonID, BaseSalary AS TotalSales  
FROM Sales_CTE   
ORDER BY SalesPersonID, BaseSalary;  

方法2-一站式

WITH Sales_CTE (SalesPersonID, BaseSalary)  
AS  
(  
    SELECT SALES_PERSON.SALES_PERSON_ID, SALES_PERSON.BASE_SALARY  
    FROM SALES_PERSON  
    WHERE SALES_PERSON_ID IS NOT NULL 
)  
select  SalesPersonID, BaseSalary AS TotalSales  
into SalesOrdersPerYear
FROM Sales_CTE   
ORDER BY SalesPersonID, BaseSalary;  

当您需要指定有关表的更多信息(主键,索引,foregin键等)时,请使用方法1。

对于更临时的事物,请使用方法2。(您通常会在此处使用#SalesOrdersPerYear这样的临时表)。

无论哪种方式,数据现在都存储在表中,您可以再次使用它。

使用临时表:

-- Check for existence and drop first to avoid errors if it already exists.
if OBJECT_ID('tempdb..#SalesOrdersPerYear') is not null
    drop table #SalesOrdersPerYear

WITH Sales_CTE (SalesPersonID, BaseSalary)  
AS  
(  
    SELECT SALES_PERSON.SALES_PERSON_ID, SALES_PERSON.BASE_SALARY  
    FROM SALES_PERSON  
    WHERE SALES_PERSON_ID IS NOT NULL 
)  
select  SalesPersonID, BaseSalary AS TotalSales  
into #SalesOrdersPerYear
FROM Sales_CTE   
ORDER BY SalesPersonID, BaseSalary;  

您还可以将其定义为表变量,这在方法之间有点交叉:

declare @SalesOrdersPerYear table
( SalesPersonID int, BaseSalary float)
;

WITH Sales_CTE (SalesPersonID, BaseSalary)  
AS  
(  
    SELECT SALES_PERSON.SALES_PERSON_ID, SALES_PERSON.BASE_SALARY  
    FROM SALES_PERSON  
    WHERE SALES_PERSON_ID IS NOT NULL 
)  
insert into @SalesOrdersPerYear  
SELECT SalesPersonID, BaseSalary AS TotalSales  
FROM Sales_CTE   
ORDER BY SalesPersonID, BaseSalary;  

此选项将仅在该批处理中保留,并且不需要删除-就像其他任何变量一样。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在where / and子句中使用sql选定的数据

如何在SQL中的不同表中使用SHOW TABLES?

如何在SQL中的不同表中使用WHERE?

如何在SQL Where子句中使用多个And条件

如何在php中使用sql更新2个表?

如何在Elixir Ecto中使用'between'创建SQL

如何在mysql json表中使用where子句查询

如何在SQL Server中使用结果集创建表

如何在SQL Server中使用Create语句创建临时表?

如何在sql触发器中使用where子句?

如何在动态SQL的表名中使用&(&)字符?

如何在动态SQL中使用表变量?或从用户定义的表类型创建临时表?

如何在SQL Server Management Studio中使用其中的不同where子句语句创建视图?

如何在SQL中创建临时表以在多个ADF活动中使用?

Racket SQL:如何在创建表中使用变量值作为表名?

如何在SQL的where子句中使用sum?

如何在SQL WITH语句中使用表?

如何在Oracle SQL中使用by by子句

如何在SQL中的SUM子句中使用not in子句

如何在SQL的Where子句中使用View元素

如何在动态 SQL 中使用表名参数

如何在动态sql中使用变量设置where子句

如何在 H2 SQL 中使用 Where 子句显示表?

如何在 SQL Server 的 where 子句中使用别名

如何在 PL/SQL 的 LIKE 子句中使用变量

如何在mysql的from子句中使用临时表?

如何在此 SQL 查询中使用 WHERE 子句?

如何在 SQL Server 连接语句的右选择语句中的 where 子句中使用左表中的列

如何在 SQL 中使用创建的列作为分组依据?