【问题标题】:Combine the results of multiple queries into one table将多个查询的结果合并到一张表中
【发布时间】:2016-06-06 16:40:47
【问题描述】:

我有一个表格,它通过 MS Access 2013 中的表格填充其条目。我附上了下表部分的图像。使用 StartTime 条目,我创建了一个查询,显示上午 8 点到 9 点之间发生的所有事务,另一个查询显示上午 9 点到 10 点之间发生的所有事务,依此类推。问题是我有很多疑问。有没有办法将所有查询中的语句组合成一个 sql 语句,并将结果输出到一个数据表中,列标题为“8AM-9AM”、“9AM-10AM”、“10AM-11AM”等。谢谢。

查询示例:

SELECT TimeValue([StartTime]) 
FROM Table1 
WHERE (TimeValue([StartTime]) Between '8:00:00 AM' And '8:59:59 AM')

Main Table

Query Result 8 AM to 9 AM

【问题讨论】:

  • 您能发表您的疑问吗?
  • @bjones 这是我的第一个查询:SELECT TimeValue([StartTime]) FROM Table1 WHERE (TimeValue([StartTime]) Between '8:00:00 AM' And '8:59:59 AM ');这是我的第二个查询 SELECT TimeValue([StartTime]) FROM Table1 WHERE (((TimeValue([StartTime])) '9:00:00 AM' 和 '9:59:59 AM'));等等……

标签: sql ms-access ms-access-2013


【解决方案1】:

以下是我所做的,可能会对您有所帮助,或者至少可以帮助您入门。我为您希望输出的每个小时(8-9、9-10、10-11 等)创建了查询。然后我创建了一个最终查询,它使用UNION 处理所有查询。

您可能已经有的查询示例:

SELECT TIMEVALUE(T1.StartTime)
FROM Table1 AS T1
WHERE (TIMEVALUE(T1.StartTime) Between '8:00:00 AM' And '8:59:59 AM');

第二:

SELECT TIMEVALUE(T1.StartTime)
FROM Table1 AS T1
WHERE (TIMEVALUE(T1.StartTime) Between '9:00:00 AM' And '9:59:59 AM');

等等……

最终查询示例:

SELECT '' AS [8-9],'' AS [9-10],'' AS [10-11]
FROM [8-9AM]
UNION
SELECT T1.*,'',''
FROM [8-9AM] AS T1
UNION
SELECT '',T2.*,''
FROM [9-10AM] AS T2
UNION ALL SELECT '','',T3.*
FROM [10-11AM] AS T3
(and so on...);

注意:我必须创建一个空白的第一行才能正确命名我机器上的列。不知道你是否会遇到同样的问题。

编辑:可能是一种更简单的方法,只使用一个表:

SELECT ID,
 SWITCH(
     TIMEVALUE(T1.StartTime) BETWEEN '8:00:00 AM' And '8:59:59 AM', 
TIMEVALUE(T1.StartTime)
    ,TIMEVALUE(T1.StartTime) NOT BETWEEN '8:00:00 AM' And '8:59:59 AM', ''
) AS [8-9],
 SWITCH(
     TIMEVALUE(T1.StartTime) BETWEEN '9:00:00 AM' And '9:59:59 AM', TIMEVALUE(T1.StartTime)
    ,TIMEVALUE(T1.StartTime) NOT BETWEEN '9:00:00 AM' And '9:59:59 AM', ''
) AS [9-10],
 SWITCH(
     TIMEVALUE(T1.StartTime) BETWEEN '10:00:00 AM' And '10:59:59 AM', 
TIMEVALUE(T1.StartTime)
    ,TIMEVALUE(T1.StartTime) NOT BETWEEN '10:00:00 AM' And '10:59:59 AM', ''
) AS [10-11],
SWITCH(
     TIMEVALUE(T1.StartTime) BETWEEN '11:00:00 AM' And '11:59:59 AM', TIMEVALUE(T1.StartTime)
    ,TIMEVALUE(T1.StartTime) NOT BETWEEN '11:00:00 AM' And '11:59:59 AM', ''
) AS [11-12],
SWITCH(
     TIMEVALUE(T1.StartTime) BETWEEN '12:00:00 AM' And '12:59:59 AM', 
TIMEVALUE(T1.StartTime)
    ,TIMEVALUE(T1.StartTime) NOT BETWEEN '12:00:00 AM' And '12:59:59 AM', ''
) AS [12-1],
SWITCH(
     TIMEVALUE(T1.StartTime) BETWEEN '1:00:00 AM' And '1:59:59 AM', TIMEVALUE(T1.StartTime)
    ,TIMEVALUE(T1.StartTime) NOT BETWEEN '1:00:00 AM' And '1:59:59 AM', ''
) AS [1-2]
FROM Table1 AS T1

【讨论】:

  • 谢谢,这几乎就是我要找的。我想知道是否有一种方法可以从顶部显示每个类别('8AM-9AM'、'9AM-10AM'、'10AM-11AM')的结果,而不是一个接一个地显示它们.
  • @NareshKumar 请参阅上面的编辑以获得更简单的解决方案。它将并排显示每一列,但仅显示 NULL 或值的空格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 2019-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多