有没有一种方法可以合并具有不同长度列的表?

时间:2019-01-24 15:23:41

标签: select union access

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

Running 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),无论他们本月是否付款。预先感谢。

1 个答案:

答案 0 :(得分:0)

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

长度=行数是 no 问题,要合并的列数是您的问题。那就是你的错误所表达的。

我看到两个原因:

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

关于1 .: 您首先选择4列,第二选择4列,第三选择只有3列。

=>在第3个选择中需要第4列。如果没有数据,请创建一个假人。

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

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;