在 VIEW 中加入具有各种后缀的历史表

Posted

技术标签:

【中文标题】在 VIEW 中加入具有各种后缀的历史表【英文标题】:Joining historical tables with various suffixes in a VIEW 【发布时间】:2014-08-01 18:42:59 【问题描述】:

在我的一个较大的表格中,旧记录被移动到以季度和年份为后缀的单独表格中。例如,SILO_q1_2014

对于历史查询,我通常使用包含当前表和所有历史表的视图。这将包括上一季度,例如q2_2014,但一旦我们进入 2014Q4 并创建新的 q3_2014 表,就会过期。

那么,让这个视图与最新季度表保持同步的最佳方式是什么?

ALTER VIEW [dbo].[v_SILO]
AS
    SELECT     *
    FROM         dbo.SILO
    WHERE     active_flag = 1
    UNION ALL
    SELECT     *
    FROM         dbo.SILO_q2_2014
    WHERE     active_flag = 1
    UNION ALL
    SELECT     *
    FROM         dbo.SILO_q1_2014
    WHERE     active_flag = 1
    UNION ALL
    SELECT     *
    FROM         dbo.SILO_q4_2012
    WHERE     active_flag = 1
    UNION ALL
    SELECT     *
    FROM         dbo.SILO_q3_2012
    WHERE     active_flag = 1
    UNION ALL
    SELECT     *
    FROM         dbo.SILO_q2_2012
    WHERE     active_flag = 1
    UNION ALL
    SELECT     *
    FROM         dbo.SILO_q1_2012
    WHERE     active_flag = 1
    UNION ALL
    SELECT     *
    FROM         dbo.SILO_q4_2011
    WHERE     active_flag = 1
    UNION ALL
    SELECT     *
    FROM         dbo.SILO_q3_2011
    WHERE     active_flag = 1
    UNION ALL
    SELECT     *
    FROM         dbo.SILO_q2_2011
    WHERE     active_flag = 1
    UNION ALL
    SELECT     *
    FROM         dbo.SILO_q1_2011
    WHERE     active_flag = 1
    UNION ALL
    SELECT     *
    FROM         dbo.SILO_q4_2010
    WHERE     active_flag = 1
    UNION ALL
    SELECT     *
    FROM         dbo.SILO_q3_2010
    WHERE     active_flag = 1
    UNION ALL
    SELECT     *
    FROM         dbo.SILO_q2_2010
    WHERE     active_flag = 1
    UNION ALL
    SELECT     *
    FROM         dbo.SILO_q1_2010
    WHERE     active_flag = 1
    UNION ALL
    SELECT     *
    FROM         dbo.SILO_q4_2009
    WHERE     active_flag = 1
    UNION ALL
    SELECT     *
    FROM         dbo.SILO_q3_2009
    WHERE     active_flag = 1
    UNION ALL
    SELECT     *
    FROM         dbo.SILO_q2_2009
    WHERE     active_flag = 1
    UNION ALL
    SELECT     *
    FROM         dbo.SILO_q1_2009
    WHERE     active_flag = 1

GO

注意:这是在 SQL 2000 数据库中

【问题讨论】:

这里的最新是什么意思?您是否发现很难在每个季度重新创建视图? 已编辑。包括最新季度的最新含义(下一个是 q3_2014)。当有多个像这样引用多个季度的视图时,这很困难。 必须是视图吗?如果您可以使用返回相同数据的存储过程,那么您可以使用动态 sql 使其自动更新。 我在其他查询和存储过程中使用此视图(将其视为表),因此我认为存储过程不会轻易取代它。 【参考方案1】:

假设您有一个标准的命名约定,您可以创建一个存储过程,该过程将删除并重新创建视图以包含当前季度。然后,将该存储过程作为计划作业放入 SQL Server 中,每月运行一次。

【讨论】:

以上是关于在 VIEW 中加入具有各种后缀的历史表的主要内容,如果未能解决你的问题,请参考以下文章

Sql Server如何在具有不同后缀的不同表中查找值

在Postgres中加入两个表后如何为具有相同名称的列提供别名

给source insight添加.cc的C++文件后缀识别(转载)

在实体框架中加入 3 个一对多表

在 esqueleto 中加入视图

数据结构之栈对逆BoLand表达式的计算