SQL - 从选择中创建表格 + 用户定义的列和值

3

目前我有以下的SELECT语句:

CREATE TABLE  TEST AS
SELECT ROW_ID,
            PROM_INTEG_ID,
            INTEGRATION_ID,
            BILL_ACCNT_ID,
            SERV_ACCT_ID,
            CFG_STATE_CD   
FROM PRODUCTS
WHERE PROD_ID = 'TestProduct'
AND STATUS_CD = 'Active';

然而,我需要添加一些在PRODUCTS表中不存在的额外列,并用自己的名称定义它们,例如HIERARCHY。

我尝试在我的SQL查询中使用WITH操作符,但是由于语法错误,它一直失败。

    CREATE TABLE  TEST AS
SELECT ROW_ID,
            PROM_INTEG_ID,
            INTEGRATION_ID,
            BILL_ACCNT_ID,
            SERV_ACCT_ID,
            CFG_STATE_CD   
            WITH
                  PRODUCT_HEIRARCHY varchar2(30)  'Test123Value'
FROM PRODUCT
WHERE PROD_ID = 'TestProduct'
AND STATUS_CD = 'Active';

总结一下,我希望从现有的表中获取列,并定义一些自己的列。

感谢任何帮助。

2个回答

9
只需在select语句中添加列名即可:
CREATE TABLE TEST AS 
    SELECT ROW_ID, PROM_INTEG_ID, INTEGRATION_ID, BILL_ACCNT_ID, SERV_ACCT_ID, CFG_STATE_CD,
           CAST('Test123Value' AS VARCHAR2(30)) as PRODUCT_HIERARCHY
    FROM PRODUCTS
    WHERE PROD_ID = 'TestProduct' AND STATUS_CD = 'Active';

请注意,cast()并非必要,但如果您希望该列具有特定的类型,则这是一个好主意。

谢谢你的提问,出于好奇,WITH操作符是用于多表SELECT语句吗? - undefined
如果我们想要原始表中的所有列怎么办?SELECT *, CAST('Test123Value' AS VARCHAR2(30)) as PRODUCT_HIERARCHY似乎不起作用(ORA-00923: FROM keyword not found where expected)。 - undefined
回答(我对Oracle数据库不熟悉)- 我们不能单独使用*,我们需要表名:https://dev59.com/7GHVa4cB1Zd3GeqPoJbw#d4TinYgBc1ULPQZFyz5c - undefined
@Mr_and_Mrs_D . . . 你可以将 * 加以限定:products.* - undefined

2
此外,使用常见的CTE或者WITH子句,你可以创建表格
CREATE TABLE t
AS 
WITH data AS ( 
   SELECT...
) 
SELECT * 
FROM data

你能把查询拼写出来,以便回答这个问题吗? - undefined
@Mr_and_Mrs_D OP尚未发布要添加到SELECT语句的其他列和表的详细信息。因此,我假设他需要连接其他表并在列列表中引用它们,使用表别名。所有这些将放在WITH子句中。 - undefined
参考@Gordon的回答 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接