【问题标题】:Union Query in Access 2.0Access 2.0 中的联合查询
【发布时间】:2018-04-17 23:04:14
【问题描述】:

我正在尝试创建将在 Access 2.0 中运行的查询。

主表有两个标题栏和两个学分栏。一个人将出现在 Title A 或 Title B 中,并获得 A 或 B 的学分。只有 Title A 获得 Credit A 的学分,Title B 获得 Credit B 的学分

**Title A   Title B Credit A    Credit B**
James   Sam     1   0
Jason   James   1   1
Justin  Sara    1   1
Sam     James   1   0
Justin  Jason   1   1
Sara    James   1   0
Jason   Sam     0   1

我想要 Access 2.0 中的结果集,其中包含 A 和 B 总学分的人名

**Person    Credits**
Jason   2
James   2
Sam     2
Sara    2
Justin  2

在访问中执行此操作的最佳方法是什么?为 A 和 B 创建两个单独的查询并合并在一起并分组?

Click here for a better picture of the Table Description

【问题讨论】:

  • 您建议的 UNION 和 GROUP 方法是我的做法。

标签: sql ms-access union


【解决方案1】:

你可以试试这个查询。

用SUM和titleAtitleB命名两个查询,然后使用UNION合并两个物种。你可以按人获得他们的总学分

SELECT Person,sum(totle) Credits
FROM 
(
    SELECT TitleA Person,SUM(CreditA) totle
    FROM T
    GROUP BY TitleA
    UNION ALL 
    SELECT TitleB Person,SUM(CreditB) totle
    FROM T
    GROUP BY TitleB
) t
GROUP BY Person

sqlfiddle:http://sqlfiddle.com/#!18/331f2/1

【讨论】:

  • 你只能做一次总和。但这也将起作用。赞成 +1
  • @âńōŋŷXmoůŜ 是的,你可以UNION ALL TitleATitleB 然后SUM :)
【解决方案2】:

是的,你是对的!您使用 UNION ALL 组合所有人员和信用列,然后执行 GROUP BY。获取总和以总计信用列。

SELECT person, sum(credit) as credits
FROM 
  (
    SELECT TitleA as person,CreditA as credit
    FROM T
   UNION ALL 
   SELECT TitleB,CreditB
   FROM T
  ) t
GROUP BY Person

【讨论】:

  • 如果我使用联合,它在 Access 2016 中工作,但在加载到 Access 2.0 时失败。
【解决方案3】:

在 Access 2.0 中获取错误“FROM 子句中的语法错误”

SELECT FlightData.Person, FlightData.TailNumber, FlightData.Aircraft, Sum(FlightData.Landings) AS TotalLandings
FROM (
SELECT [Flight Data].Date, [Flight Data].Pilot AS Person, [Flight Data].[Aircraft Number] AS TailNumber, Aircraft.[Aircraft Type] AS Aircraft, [Flight Data].[Pilot Landings] AS Landings FROM [Flight Data] INNER JOIN Aircraft ON [Flight Data].[Aircraft Number] = Aircraft.[Tail Number]
UNION ALL
SELECT [Flight Data].Date, [Flight Data].CoPilot as Person,[Flight Data].[Aircraft Number] AS TailNumber, Aircraft.[Aircraft Type] as Aircraft, [Flight Data].[CoPilot Landings]AS Landings FROM [Flight Data]  INNER JOIN Aircraft ON [Flight Data].[Aircraft Number] = Aircraft.[Tail Number] 
)  AS FlightData
WHERE FlightData.[date] Between [Start Date] And [End Date]
GROUP BY FlightData.Person, FlightData.TailNumber, FlightData.Aircraft;

【讨论】:

  • 抱歉弄得一团糟,我能够将联合创建为自己的查询,然后引用它并访问 2.0 更喜欢它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多