【问题标题】:Separate a record into multiple records for each column将一条记录分成每列的多条记录
【发布时间】:2014-07-14 20:41:20
【问题描述】:

我在 MS Access 中有一个查询,它从 4 个不同的表中提取,它显示一个 ID(这在 4 个表中是通用的)和 4 个总计字段,一个是实际总计,另一个是预测总计等

因此,每条记录显示如下内容:

ID     | TotalActual | TotalForecast | TotalRR | TotalBudget

234518 | 90.10       | 150.98        |  152.31 |    149.0

有没有办法分割这条记录,所以它显示如下:

Type     | ID     | Total  |

Actual   | 234518 | 90.10  | 

Forecast | 234518 | 150.98 |  

RR       | 234518 | 152.31 | 

Budget   | 234518 | 149.0  |

我不想建立联合,因为数据需要能够每天刷新/更新,而且我知道当表/查询发生变化时联合不会更新

【问题讨论】:

  • I know that unions do not update when there are changes in the table/query 恐怕这是一个虚假陈述,请解释一下您的意思
  • 如果表/查询发生变化,它不会自动出现在联合查询中,我必须再次运行联合查询才能使更新出现。使用常规查询时,对表的更改将自动显示
  • 如果你指的是数据的变化,它是假的,你总是会看到实际的数据。如果您引用架构或表结构的更改(更改列名),即使使用 UNION 也不会起作用。
  • support.microsoft.com/kb/328828 这比我解释得更好
  • 如果您的意思是计算字段,那么可以,您也可以在 UNION 查询中使用这些字段(在每个单独的 SELECT 查询中被 UNIONed 一起)。他们所说的“您无法在 [UNION] 查询中更新数据”的意思是,例如,如果您在数据表视图中打开 UNION 查询,则您无法在网格中键入新值来更新基础表。但是,您可以直接更新基础表,然后刷新 UNION 查询的结果(例如,通过点击 [F5])以查看更新后的值。

标签: sql ms-access ms-access-2007 ms-access-2010


【解决方案1】:

正如问题的 cmets 所揭示的,您对使用 UNION 查询的反感是基于对这些查询如何工作的误解,因此是没有根据的。实际上,您确实希望使用 UNION 查询而不是您当前的查询(大概是对四个表中的每一个执行 INNER JOIN 以生成五列)。 UNION 查询类似于

    SELECT
        'Actual' AS [Type],
        [ID],
        [TotalActual] AS [Total]
    FROM [ActualTable]
UNION ALL
    SELECT
        'Forecast' AS [Type],
        [ID],
        [TotalForecast] AS [Total]
    FROM [ForecastTable]
UNION ALL
    SELECT
        'RR' AS [Type],
        [ID],
        [TotalRR] AS [Total]
    FROM [RRTable]
UNION ALL
    SELECT
        'Budget' AS [Type],
        [ID],
        [TotalBudget] AS [Total]
    FROM [BudgetTable]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 2017-02-24
    • 2019-02-18
    • 2016-02-06
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多