【问题标题】:Can select into add a new field to the resulting table?可以选择在结果表中添加一个新字段吗?
【发布时间】:2009-01-27 19:27:22
【问题描述】:

我在 SQL Server 2005 中有一条 SQL 语句,看起来像这样:

SELECT * INTO #TempTable FROM FirstTable WHERE <complex where clause>

我真正非常喜欢的是让生成的临时表有一个额外的字段,该字段本质上是一个从 1 向上计数的整数字段,按照 where 子句返回记录的顺序。

这可能吗?

(本质上,我希望能够返回从第一个 select 语句返回的记录的子集,沿着“第 45 到 179 行”的行。)

【问题讨论】:

    标签: sql-server tsql select


    【解决方案1】:

    试试这个,使用Row_Number:

    -- insert into temp table
    SELECT *, 
      ROW_NUMBER() OVER (ORDER BY SortColumn) AS SortColumn INTO #TempTable 
    FROM FirstTable 
    WHERE <complex where clause>
    
    -- check the results and drop the table
    SELECT * FROM #TempTable WHERE SortColumn BETWEEN 45 AND 179 ORDER BY SortColumn
    DROP TABLE  #TempTable
    

    显然,您需要将 SortColumn 替换为适合您情况的任何内容


    编辑:

    如果你只是想进行分页,有很多这样的例子:

    【讨论】:

    • 我也会在第一条语句的末尾添加一个 ORDER BY SortColumn,以防万一。
    • 好点乔尔。我用临时表选择的 order by 更新它并添加到窗口条件中。
    • @Electrons_Ahoy:如果您真的只需要记录的子集,请查看我提供的分页链接——没有临时表,有很多方法可以更有效地做到这一点。
    • 嗯,这简直太完美了。我正在进行分页,但(像往常一样)我只是在修改现有的巨大存储过程,所以我继承了临时表和相关逻辑。 :) 不过,这些链接太棒了。谢谢你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多