0

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

    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 新手,这就是为什么其中一些是多余的)。基本上就目前而言,我列出了一条道路的摩托车的年、月、日、小时和每小时计数。现在我的两个问题:

  1. 如何获取此查询并使其搜索 RUD 数据库中的每个表?我只需要列出它们并将它们联合起来,还是有更快的方法?

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

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

4

1 回答 1

0

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

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

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

于 2013-03-05T04:27:50.697 回答