У меня есть результат запроса, в котором у каждой детали есть свой столбец для отображения остатков.
Id AccountNumber Particular Inst1_Balance Inst2_Balance Inst3_Balance Inst4_Balance Inst5_Balance
1 99921 Inst5 0.00 0.00 0.00 0.00 232.50
1 99921 Inst3 0.00 0.00 170.00 0.00 0.00
3 86123 Inst3 0.00 0.00 843.00 0.00 0.00
4 76543 Inst2 0.00 123.00 0.00 0.00 0.00
5 12323 Inst4 0.00 0.00 0.00 1000.00 0.00
5 12323 Inst2 0.00 75.00 0.00 0.00 0.00
5 12323 Inst1 2765.00 0.00 0.00 0.00 0.00
7 23243 Inst5 0.00 0.00 0.00 0.00 865.00
8 43467 Inst2 0.00 435.00 0.00 0.00 0.00
9 67543 Inst3 0.00 0.00 1234.00 0.00 0.00
10 33245 Inst2 0.00 111.00 0.00 0.00 0.00
11 88881 Inst2 0.00 222.00 0.00 0.00 0.00
12 99931 Inst1 767.00 0.00 0.00 0.00 0.00
12 99931 Inst2 0.00 2345.00 0.00 0.00 0.00
Из приведенной выше таблицы я хочу объединить остатки реквизитов в один столбец.
Id AccountNumber Particular Balance
1 99921 Inst5 232.50
1 99921 Inst3 170.00
3 86123 Inst3 843.00
4 76543 Inst2 123.00
5 12323 Inst4 1000.00
5 12323 Inst2 75.00
5 12323 Inst1 2765.00
7 23243 Inst5 865.00
8 43467 Inst2 435.00
9 67543 Inst3 1234.00
10 33245 Inst2 111.00
11 88881 Inst2 222.00
12 99931 Inst1 767.00
12 99931 Inst2 2345.00
;WITH tmptable AS (
SELECT INS.CustomerId AS 'Id',
INS.Particular AS 'Particular',
CONCAT(CON.AccountNumber) AS 'AcctNumber',
COALESCE(SUM(case when particular = 'Inst1' then [Bal] else 0 end),0) AS 'Inst1Bal',
COALESCE(SUM(case when particular = 'Inst2' then [Bal] else 0 end),0) AS 'Inst2Bal',
COALESCE(SUM(case when particular = 'Inst3' then [Bal] else 0 end),0) AS 'Inst3Bal',
COALESCE(SUM(case when particular = 'Inst4' then [Bal] else 0 end),0) AS 'Inst4Bal',
COALESCE(SUM(case when particular = 'Inst5' then [Bal] else 0 end),0) AS 'Inst5Bal'
FROM [Installment] INS
LEFT JOIN Customer CONS
ON INS.CustomerId = CON.Id
GROUP BY INS.CustomerId,
CON.AccountNumber
INS.Particular
)
SELECT Id,
AcctNumber,
Particular,
CAST(Inst1Bal AS numeric(18,2)) AS 'Inst1_Balance',
CAST(Inst2Bal AS numeric(18,2)) AS 'Inst2_Balance',
CAST(Inst3Bal AS numeric(18,2)) AS 'Inst3_Balance',
CAST(Inst4Bal AS numeric(18,2)) AS 'Inst4_Balance',
CAST(Inst5Bal AS numeric(18,2)) AS 'Inst5_Balance'
FROM tmptable
На данный момент у меня есть код, который отображает данные на основе первой таблицы. Мне нужна помощь в объединении 5 столбцов балансов в один столбец, как показано во второй таблице. Можно ли это сделать с помощью JOIN?
В соответствии с руководством по вопросам не публикуйте изображения кода, данных, сообщений об ошибках и т. д. — скопируйте или введите текст в вопрос. Пожалуйста, ограничьте использование изображений для диаграмм или демонстрации ошибок рендеринга, вещей, которые невозможно точно описать с помощью текста.
Да, в чем на самом деле ваш вопрос, у вас уже есть вопрос, делает ли он то, что вы хотите, или нет? Вы также знаете способ сделать это, например, объединиться, так что дерзайте? Как я могу вам помочь?
Хм, исходные данные, с которыми вы работаете, уже находятся в нужном вам формате, поэтому просто удалите агрегирование и сделайте из него прямой выбор? Прямо сейчас вы спрашиваете, как приготовить помидоры по рецепту пиццы.


Ваш текущий запрос является сводным запросом. Похоже, вам нужна простая группа по запросу.
SELECT INS.CustomerId AS Id,
CON.AccountNumber AS AcctNumber,
INS.Particular AS Particular,
SUM([Bal]) AS Balance
FROM [Installment] INS
LEFT JOIN Customer CON
ON INS.CustomerId = CON.Id
GROUP BY INS.CustomerId,
CON.AccountNumber,
INS.Particular;
подожди, твой псевдоним испорчен. Иногда это CONS, иногда CON. Замечательно, что вы исключили конкатные вещи в поле номера счета, хе-хе-хе
Исправлен псевдоним. Спасибо
Псевдоним был перепутан в исходном вопросе.
Вы просите отредактировать запрос к первой таблице или получить вторую таблицу?
I am contemplating to use UNION but I need recommendations/suggestions and have it in a single query.<< Я не уверен в вопросе