Есть ли способ объединить таблицы, которые имеют столбцы с различной длиной? - PullRequest
0 голосов
/ 24 января 2019

У меня есть набор таблиц, которые я получаю ежемесячно, в которых указано, что участник заплатил в этом месяце.Если они не платят, они не появляются в таблице.Я хочу выяснить, сколько каждый член заплатил со временем.Участник может появиться в таблице за один месяц, но не в другой.Каждая таблица имеет общий идентификатор, связанный с членом, но из-за ежемесячной изменчивости не все имеют одинаковую длину столбца.Каждая таблица содержит участника и сумму взносов, которые он (а) заплатил в этом месяце.Я сталкиваюсь с ошибкой «Число столбцов в двух выбранных таблицах или запросах объединения не совпадает» из-за этого.

Запуск 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;

Моя цель - увидеть все отчисления (Curr Dedn) от всех участников (ID), независимо от того, выплачены ли они в этом месяце.Заранее спасибо.

1 Ответ

0 голосов
/ 24 января 2019

Вы получаете ошибку на втором фрагменте размещенного кода? (Потому что есть союз)

длина = количество строк равно нет проблема, количество столбцов (для объединения) является вашей проблемой. Вот что говорит твоя ошибка.

Я вижу две причины:

  1. вы выбираете разное количество столбцов и хотите объединить их - для того, чтобы все работало, все выделенные элементы должны работать одинаково
  2. Вы используете "group by" - я просто не уверен, что этот запрос в качестве отдельного даст вам столько столбцов, сколько ожидалось - если это так, игнорируйте эту часть

относительно 1 .: у вас есть 4 столбца в первом выборе, 4 во втором и только 3 в третьем.

=> вам нужен 4-й столбец в вашем 3-м выборе. Если у вас нет данных, сделайте манекен.

[обновление из-за комментария "works"]: попробуйте это - и я не знаю, правильны ли «пустышка» или «пустышка»

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;
...