我的上级要求我编写一个查询,搜索数据库中的每个表格(每个代表一条道路及其总交通量),并按小时计算摩托车总数。这是我到目前为止在一张桌子上进行测试时所得到的:
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的新手,这就是为什么其中一些将是多余的)。基本上,我列出了一条道路的摩托车的年,月,日,小时和小时数。现在我的两个问题:
如何进行此查询并使其在RUD数据库中的每个表中进行搜索?我只需要将它们全部列出并将它们联合起来,或者是否有更快的方式?
我意识到,如果我搜索每个只收集上述(年,月,日,小时,小时计数)的表格,我将得到正确的数据,但无法区分所有计数的路径来自(哪里。有没有办法选择表ID(在此示例中,10011E是ID,并且是特定道路的指定名称)并将其放在从中选择的行旁边的列中?
< / LI> 醇>如果有人需要澄清我的意思,请告诉我!谢谢!
答案 0 :(得分:0)
一种选择是使用UNION ALL
并为其添加一个额外的列。在这种情况下,您必须写出每个表格,但这可能是您最快的选择:
SELECT ID, 'YourTable' TableName
FROM YourTable
UNION ALL
SELECT ID, 'YourOtherTable'
FROM YourOtherTable
....
或者,动态sql可以产生相同的结果 - 您可能不必输入所有表名,但它会带来性能损失。