【问题标题】:Merge SQL scripts for row condition and table merging用于行条件和表合并的合并 SQL 脚本
【发布时间】:2013-12-31 17:09:18
【问题描述】:

我有以下这些 SQL 代码来执行清理任务:

  1. SELECT 表中满足条件的前 n 行并将它们放入新表中。请注意,[source].var='1' 因表而异。

    SELECT TOP n * INTO tablen
    FROM source
    WHERE [source].var='1';
    
    # concrete example 
    SELECT TOP n * INTO table1
    FROM source
    WHERE [source].var1='1';
    
    SELECT TOP n * INTO table2
    FROM source
    WHERE [source].var2='1';        
    
    SELECT TOP n * INTO table3
    FROM source
    WHERE [source].var3='1';
    
    SELECT TOP n * INTO table4
    FROM source
    WHERE [source].var4='1';
    
    SELECT TOP n * INTO table5
    FROM source
    WHERE [source].var5='1';
    
  2. 在第一步创建 n 表后,我使用查询将它们连接起来。

    # code2
    SELECT * FROM table1
    UNION ALL
    SELECT * FROM table2
    UNION ALL
    SELECT * FROM table3
    UNION ALL
    SELECT * FROM table4
    UNION ALL
    SELECT * FROM table5
    
  3. 最后我把第二个结果放到一个新表中,这样我就可以使用它了。

    SELECT * 
    INTO dest
    FROM code2 
    

有谁知道如何将这些繁琐的任务放到一个 SQL 查询中,这样我就不必重复 15 次了吗?

【问题讨论】:

  • 你想对这些任务做什么?
  • 只是为了从具有单独条件的表中获取前 n 行并将它们重新组合在一起。

标签: sql ms-access ms-access-2007


【解决方案1】:

我会尝试回答这个问题,但这是我的第一个答案,所以请放轻松。首先,我不确定每个“TOP”行查询的源表是否相同。如果是,那么你不需要桌子,1-5。当然,除非您出于某种原因想要 5 个临时表……而且我假设您知道您在使用 UNION ALL 做什么。

只需内联查询原表:

 select a.* into dest
 from (select TOP n *
       from source
       where source.var1='1'
       UNION ALL
       select TOP n *
       from source
       where source.var2='1'
       UNION ALL
       select TOP n *
       from source
       where source.var3='1'
       UNION ALL
       select TOP n *
       from source
       where source.var4='1'
       UNION ALL
       select TOP n *
       from source
       where source.var5='1'
      ) a

【讨论】:

  • 新年快乐@riverdog!这是一流的!
猜你喜欢
  • 1970-01-01
  • 2016-02-08
  • 2014-01-17
  • 1970-01-01
  • 2015-11-09
  • 1970-01-01
  • 2020-07-05
  • 2015-01-09
  • 2013-06-10
相关资源
最近更新 更多