【问题标题】:Use a Resultset as Table (TSQL)将结果集用作表 (SQL)
【发布时间】:2012-11-28 19:32:31
【问题描述】:

说,我有以下几点:

WITH    T1 as (select xxx as MYALIAS FROM T)
        T2 as (select yyy from T1)

SELECT  T2.ID,
        MAX(MYALIAS) AS MAX_ALIAS,      
        T.AN_ALIAS

FROM   T2

WHERE  MAX_ALIAS <> T.AN_ALIAS 
GROUP  BY T2.ID, T.AN_ALIAS

让我们把结果想象成一个名为MY_RESULT_TABLE的表。

我需要将 MY_RESULT_TABLE 加入一些其他列。
我需要获得 TEMP_TABLE = MY_RESULT_TABLE + SOME JOINS.

问题是如何使用这个 MY_RESULT_TABLE?

我试着做 WITH MY_RESULT_TABLE AS (the code above)...没用...

编辑
我的另一个问题是我需要从 MY_RESULT_TABLE 的选择中插入一些值到 MY_TABLE...

INSERT INTO MY_TABLE_TO_INSERT ...
SELECT a b c FROM MY_RESULT_TABLE

【问题讨论】:

  • 没有工作 就像 ..?您能显示您尝试过的确切代码吗?
  • 我把上面的所有代码都包围了WITH MY_RESULT_TABLE AS ( WITH T1...

标签: sql sql-server tsql


【解决方案1】:

它应该可以按照您的详细说明工作,只需记住用逗号分隔每个 CTE。

编辑您也可以将 CTE 用于 INSERT 和 UPDATE。已更新插入。

;
WITH T1 AS 
(
    SELECT xxx 
    AS MYALIAS FROM T
),
T2 AS 
(
    SELECT yyy 
    FROM T1
),
MY_RESULT_TABLE AS 
(
    SELECT  T2.ID,
            MAX(MYALIAS) AS MAX_ALIAS,      
            T.AN_ALIAS
    FROM   T2
    WHERE  MAX_ALIAS <> T.AN_ALIAS 
    GROUP  BY T2.ID, T.AN_ALIAS

)
INSERT INTO MY_TABLE_TO_INSERT(col1, col2, col3, ...)
    SELECT ID, MAX_ALIAS, xyz.OtherColumnsHere
        FROM MY_RESULT_TABLE
        INNER JOIN xyz on ...

【讨论】:

  • 我的问题是我需要INSERT INTO MY_TABLE_TO_INSERT SELECT * FROM MY_RESULT_TABLE,这显然不适用于公用表表达式......(
  • @serhio CTE 也适用于插入和更新 - WITH CTE AS (...) INSERT INTO ... SELECT ... FROM CTE。我已经更新了
  • “CTE 后面必须跟一个 单个 SELECT、INSERT、UPDATE、MERGE 或 DELETE 语句,该语句引用部分或所有 CTE 列。”msdn.microsoft.com/en-us/library/ms175972%28v=sql.100%29.aspx
  • @serhio:你有什么困惑? INSERT INTO ... SELECT ... 是一个单个语句。
猜你喜欢
  • 2011-02-11
  • 1970-01-01
  • 1970-01-01
  • 2015-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多