首页 > 解决方案 > 有没有办法组合具有不同长度的列的表?

问题描述

我有一组每月收到的表格,告诉我会员当月支付的费用。如果他们不付钱,他们就不会出现在桌子上。我想弄清楚每个成员随着时间的推移支付了多少。一个成员可能会出现在一个月的表格中,但不会出现在另一个月的表格中。每个表共享一个链接到成员的“ID”,但由于每月的可变性,它们的列长度并不相同。每个表都包含一个成员和他当月支付的会费金额。因此,我遇到了“两个选定表中的列数或联合的查询不匹配”错误。

运行Access 365,粘贴两组代码:

当我尝试 INNER JOIN 时,我丢失了并非所有表中的条目。

当我尝试 UNION 时,出现错误:“两个选定表中的列数或联合查询的查询不匹配。”

SELECT [2018-9 Dues Deduct].ID, [2018-9 Dues Deduct].Name, [2018-9 Dues Deduct].[Curr Dedn], [2018-10 Dues Deduction].[Curr Dedn], [2018-11 Dues Deductions].[Curr Dedn], [2018-12 Dues Deductions].[Curr Dedn]

FROM (([2018-9 Dues Deduct] 

INNER JOIN [2018-10 Dues Deduction] ON [2018-9 Dues Deduct].ID = [2018-10 Dues Deduction].ID) 

INNER JOIN [2018-11 Dues Deductions] ON [2018-10 Dues Deduction].ID = [2018-11 Dues Deductions].ID) 

INNER JOIN [2018-12 Dues Deductions] ON [2018-11 Dues Deductions].ID = [2018-12 Dues Deductions].ID;

SELECT 
  [2018-9 Dues Deduct].ID, 
  [2018-9 Dues Deduct].Name, 
  [2018-9 Dues Deduct].[Curr Dedn], 
  [2018-10 Dues Deduction].[Curr Dedn]
FROM [2018-9 Dues Deduct] 
INNER JOIN [2018-10 Dues Deduction] ON [2018-9 Dues Deduct].ID = [2018-10 Dues Deduction].ID
GROUP BY [2018-9 Dues Deduct].ID, [2018-9 Dues Deduct].Name, [2018-9 Dues Deduct].[Curr Dedn], [2018-10 Dues Deduction].[Curr Dedn]

UNION 
SELECT 
  [2018-10 Dues Deduction].ID, 
  [2018-10 Dues Deduction].Name, 
  [2018-10 Dues Deduction].[Curr Dedn], 
  [2018-11 Dues Deductions].[Curr Dedn]
FROM [2018-10 Dues Deduction] 
INNER JOIN [2018-11 Dues Deductions] ON [2018-10 Dues Deduction].ID = [2018-11 Dues Deductions].ID

UNION 
SELECT 
  [2018-11 Dues Deductions].ID, 
  [2018-11 Dues Deductions].Name, 
  [2018-11 Dues Deductions].[Curr Dedn]
FROM [2018-11 Dues Deductions] 
INNER JOIN [2018-12 Dues Deductions] ON [2018-11 Dues Deductions].ID = [2018-12 Dues Deductions].ID;

我的目标是查看所有成员 (ID) 的所有扣除额 (Curr Dedn),无论他们本月是否付款。提前致谢。

标签: ms-accessselectunion

解决方案


您在第二个发布的代码片段上收到错误?(因为有工会)

长度=行数问题,列数(联合)是你的问题。这就是你的错误所说的。

我看到两个原因:

  1. 您选择不同数量的列并希望合并它们 - 所有选择都需要相同的列才能使其正常工作
  2. 您使用“分组依据”-我只是不确定此查询是否可以独立为您提供预期的那么多列-如果确实如此,请忽略这部分

关于 1.:您在第一次选择中有 4 列,在第 2 次中有 4 列,在第 3 次中只有 3 列。

=> 你需要在你的第三个选择中的第四列。如果你没有数据,做一个假人。

[由于评论“有效”而更新]:试试这个 - 我不知道“dummy”或“dummy”是否正确

SELECT 
  [2018-9 Dues Deduct].ID, 
  [2018-9 Dues Deduct].Name, 
  [2018-9 Dues Deduct].[Curr Dedn], 
  [2018-10 Dues Deduction].[Curr Dedn]
FROM [2018-9 Dues Deduct] 
INNER JOIN [2018-10 Dues Deduction] ON [2018-9 Dues Deduct].ID = [2018-10 Dues Deduction].ID
GROUP BY [2018-9 Dues Deduct].ID, [2018-9 Dues Deduct].Name, [2018-9 Dues Deduct].[Curr Dedn], [2018-10 Dues Deduction].[Curr Dedn]

UNION 

SELECT 
  [2018-10 Dues Deduction].ID, 
  [2018-10 Dues Deduction].Name, 
  [2018-10 Dues Deduction].[Curr Dedn], 
  [2018-11 Dues Deductions].[Curr Dedn]
FROM [2018-10 Dues Deduction] 
INNER JOIN [2018-11 Dues Deductions] ON [2018-10 Dues Deduction].ID = [2018-11 Dues Deductions].ID

UNION 

SELECT 
  [2018-11 Dues Deductions].ID, 
  [2018-11 Dues Deductions].Name, 
  [2018-11 Dues Deductions].[Curr Dedn], 
  "dummy" 
FROM [2018-11 Dues Deductions] 
INNER JOIN [2018-12 Dues Deductions] ON [2018-11 Dues Deductions].ID = [2018-12 Dues Deductions].ID;

推荐阅读