使表ID显示为列,并在所有表中选择

时间:2013-03-05 04:22:39

标签: sql sql-server-2008 union

我的上级要求我编写一个查询,搜索数据库中的每个表格(每个代表一条道路及其总交通量),并按小时计算摩托车总数。这是我到目前为止在一张桌子上进行测试时所得到的:

    WITH
totalCount AS
(
 SELECT DATEDIFF(dd,0,event_time) AS DaySerial,
        DATEPART(dd,event_time) AS theDay,
        DATEDIFF(mm,0,event_time) AS MonthSerial,
        DATEPART(mm,event_time) AS MonthofYear,
        DATEDIFF(hh,0,event_time) AS HourSerial,
        DATEPART(hh,event_time) AS Hour,
        COUNT(*) AS HourlyCount,
        DATEDIFF(yy,0,event_time) AS YearSerial,
        DATEPART(yy,event_time) AS theYear    
   FROM [RUD].dbo.[10011E]
   WHERE length <='1.7'
  GROUP BY DATEDIFF(hh,0,event_time), 
           DATEPART(hh,event_time),
           DATEDIFF(dd,0,event_time), 
           DATEPART(dd,event_time),
           DATEDIFF(mm,0,event_time), 
           DATEPART(mm,event_time),
           DATEDIFF(yy,0,event_time), 
           DATEPART(yy,event_time)
)
    SELECT 
        theYear,
        MonthofYear,
        theDay,
        Hour,
        AVG(HourlyCount) AS Avg_Count                   
    FROM 
        totalCount
    GROUP BY 
        theYear,
        MonthofYear,
        theDay,
        Hour
    ORDER BY
        theYear,
        MonthofYear,
        theDay,
        Hour

现在我确定其中一些是多余的或不需要的,现在还可以(我是SQL btw的新手,这就是为什么其中一些将是多余的)。基本上,我列出了一条道路的摩托车的年,月,日,小时和小时数。现在我的两个问题:

  1. 如何进行此查询并使其在RUD数据库中的每个表中进行搜索?我只需要将它们全部列出并将它们联合起来,或者是否有更快的方式?

  2. 我意识到,如果我搜索每个只收集上述(年,月,日,小时,小时计数)的表格,我将得到正确的数据,但无法区分所有计数的路径来自(哪里。有没有办法选择表ID(在此示例中,10011E是ID,并且是特定道路的指定名称)并将其放在从中选择的行旁边的列中?

    < / LI>

    如果有人需要澄清我的意思,请告诉我!谢谢!

1 个答案:

答案 0 :(得分:0)

一种选择是使用UNION ALL并为其添加一个额外的列。在这种情况下,您必须写出每个表格,但这可能是您最快的选择:

SELECT ID, 'YourTable' TableName
FROM YourTable
UNION ALL
SELECT ID, 'YourOtherTable' 
FROM YourOtherTable
....

或者,动态sql可以产生相同的结果 - 您可能不必输入所有表名,但它会带来性能损失。