Member 12882545 Ответов: 2

Как объединить 4 Инструкции select SQL в два столбца?


Привет.

Я знаю, что существует много решений для операторов SQL merge/union. Но я не получить правильный результат, что я хочу. Я хочу объединить 4 различных SQL-оператора, которые показывают его имя и общее количество. Это означает, что таблица будет состоять из 2 столбцов и 5 строк, включая текст заголовка.

как переставить запросы так, чтобы было показано два столбца (тип просроченный и общий просроченный сбор) с 4 строками, состоящими из (Общий начисленный просроченный, общий просроченный процент, общий просроченный штраф, общий просроченный основной долг с их общей суммой), как показано в примере ниже

Type	       Total
Total Overdue	 1000.00
Total Charged	 55.01
Total Interest	 20.14
Total Penalty	  5947



Спасибо.

Что я уже пробовал:

Первый запрос, который я попробовал, это

выберите (Выбрать сумма([сумма просроченных процентов(мыр)]), а [общая сумма процентов просроченной(мыр)] из (выбрать сумма(Л. Д. interestOverdue) * д. bidspotrate как [Итого проценты просроченные(мыр)] в кредит а л внутреннее соединение Danadb А Д О Л.валюта = д.группа ccycode д. bidspotrate) как [общее в мир]), как [общая сумма процентов просроченной],
(Выбрать сумма([сумма взыскания просроченной(мыр)]), как [Итого просроченная неустойка(мыр)] из (выбрать сумма(Л. Д. penaltyOverdue) * д. bidspotrate как [Итого просроченная неустойка(мыр)] в кредит а л внутреннее соединение Danadb А Д О Л.валюта = д.ccycode где (л.группа источник = 'Exсel ') исполнителя D.bidspotrate) как [общее в мир]), как [общая взыскания просроченной],
(Выбрать сумма([общая сумма просроченной(мыр)]), а [общая сумма просроченной(мыр)] из (выбрать сумма(Л. Д. principalOverdue) * д. bidspotrate как [общая сумма просроченной(мыр)] в кредит а л внутреннее соединение Danadb А Д О Л.валюта = д.группа ccycode д. bidspotrate) как [общее в мир]), как [Итого основные Ovedue],
( выбрать сумма([сумма списана просроченная(мыр)]) как
[Общая сумма начисленной просрочки (MYR)] from (select (SUM (l. chargedOverdue) * d. bidspotrate) as
[Общая списана просроченная(мыр)] в кредит л, danadb D, где л.валюта=д.группа ccycode д. bidspotrate) как [общее в мир]), как [всего списана просроченная]

Результат этого запроса показывает 4 столбца с двумя строками.

Total Overdue	Total Charged	Total Interest	Total Penalty
   1000.00	           55.01	           20.14	5747



И я попробовал еще раз.

выберите (Выбрать сумма([сумма просроченных процентов(мыр)]), а [общая сумма процентов просроченной(мыр)] из (выбрать сумма(Л. Д. interestOverdue) * д. bidspotrate как [Итого проценты просроченные(мыр)] в кредит а л внутреннее соединение Danadb А Д О Л.валюта = д.группа ccycode д. bidspotrate) как [Итого, в мире]) Союз

(Выбрать сумма([сумма взыскания просроченной(мыр)]), как [Итого просроченная неустойка(мыр)] из (выбрать сумма(Л. Д. penaltyOverdue) * д. bidspotrate как [Итого просроченная неустойка(мыр)] в кредит а л внутреннее соединение Danadb А Д О Л.валюта = д.ccycode где (л.группа источник = 'Exсel ') исполнителя D.bidspotrate) как [Итого, в мире]) Союз
(Выбрать сумма([общая сумма просроченной(мыр)]), а [общая сумма просроченной(мыр)] из (выбрать сумма(Л. Д. principalOverdue) * д. bidspotrate как [общая сумма просроченной(мыр)] в кредит а л внутреннее соединение Danadb А Д О Л.валюта = д.группа ccycode д. bidspotrate) как [Итого, в мире]) Союз
( выбрать сумма([сумма списана просроченная(мыр)]) как
[Общая сумма начисленной просрочки (MYR)] from (select (SUM (l. chargedOverdue) * d. bidspotrate) as
[Общая сумма начисленной просроченной задолженности (MYR)] из кредита l, danadb d, где l. currency=d. ccycode group by d. bidspotrate) как [всего в MYR])

Результат второго запроса показывает только один столбец с 5 строками.

Total
1000.00
55.01
20.14
5947

Wendelius

Было бы полезно, если бы вы могли разместить примеры исходных данных вместе с желаемыми выходными данными.

Member 12882545

Я уже публикую источник данных.

Ниже приведен желаемый результат, который я хочу :

Есть два столбца: тип и итог


Типа Общий
Общая Просроченная Задолженность 1000.00
Итого Начислено 55.01
Общая Сумма Процентов 20.14
Суммарное 5947

2 Ответов

Рейтинг:
2

jamuro77

Мне нужно было бы знать структуру таблиц, но я бы сказал, что вам нужно использовать оператор "UNION ALL". Вот он псевдокод:

выберите "общая просрочка" в качестве типа, [значение для общей просрочки] в качестве общей суммы
ОТ [...]
где [...]
СОЮЗ ВСЕХ
выберите 'общий заряженных', [значение для полного взимается]
ОТ [...]
где [...]
СОЮЗ ВСЕХ
выберите "общий процент", [значение для общего процента]
ОТ [...]
где [...]
СОЮЗ ВСЕХ
выберите "общий штраф", [значение для общего штрафа]
ОТ [...]
где [...]

Поместите правильный окончательный код в предложения "from" и " where "или добавьте" joins " по мере необходимости.


Member 12882545

Запрос основан на двух таблицах. Когда я использовал union all, ниже есть ошибка

Msg 512, Уровень 16, Состояние 1, Строка 16
Подзапрос вернул более 1 значения. Это не допускается, когда подзапрос следует за=,!=, <, <=, >, >= или когда подзапрос используется в качестве выражения.
Предупреждение: нулевое значение исключается агрегатом или другой операцией набора.

Рейтинг:
11

jamuro77

Из результатов вашего первого запроса вы должны использовать UNPIVOTING:

declare @MyTable table(
   [Total Overdue] money,
   [Total Charged] money,
   [Total Interest] money,
   [Total Penalty] money
   )

  insert into @MyTable
  (
select (SELECT SUM([Total Interest Overdue(MYR)]) AS [Total Interest Overdue(MYR)] FROM (SELECT SUM(l.interestOverdue) * d.bidspotrate AS [Total Interest Overdue(MYR)] FROM Loan AS l INNER JOIN Danadb AS d ON l.currency = d.ccycode GROUP BY d.bidspotrate) AS [Total in MYR]) as [Total Interest Overdue],
(SELECT SUM([Total Penalty Overdue(MYR)]) AS [Total Penalty Overdue(MYR)] FROM (SELECT SUM(l.penaltyOverdue) * d.bidspotrate AS [Total Penalty Overdue(MYR)] FROM Loan AS l INNER JOIN Danadb AS d ON l.currency = d.ccycode WHERE (l.source = 'Excel ') GROUP BY d.bidspotrate) AS [Total in MYR]) as [Total Penalty Overdue],
(SELECT SUM([Total Principal Overdue(MYR)]) AS [Total Principal Overdue(MYR)] FROM (SELECT SUM(l.principalOverdue) * d.bidspotrate AS [Total Principal Overdue(MYR)] FROM Loan AS l INNER JOIN Danadb AS d ON l.currency = d.ccycode GROUP BY d.bidspotrate) AS [Total in MYR]) as [Total Principal Ovedue],
( select sum([Total Charged Overdue(MYR)]) as 
[Total Charged Overdue(MYR)] from (select (SUM (l.chargedOverdue) * d.bidspotrate) as 
[Total Charged Overdue(MYR)] from loan l, danadb d where l.currency=d.ccycode group by d.bidspotrate) as [Total in MYR]) as [Total Charged Overdue]
  )

  select [Type], [Total] from
  (select * from @MyTable) Src
  unpivot ([Total] for [Type] in ([Total Overdue],[Total Charged],[Total Interest],[Total Penalty])) Res


Вставьте свои данные в табличную переменную вместо фиксированных значений, и тогда у вас будет желаемое решение.


Member 12882545

Большое вам спасибо:). Но я хочу знать, можно ли на основе моих запросов, которые я опубликовал, дать результат, который я хотел? Потому что я хочу получить данные из базы данных, а не просто вставить нужное значение.

jamuro77

Я это знаю. По этой причине у вас есть несколько решений:

1) Используйте свой первый запрос для загрузки новой таблицы переменных, а затем примените UNPIVOTING, как описано выше.
2) Используйте общее табличное выражение для инкапсуляции вашего первого запроса,а затем примените к нему UNPIVOTING.
Вы получите желаемые результаты.

Member 12882545

Я попробовал использовать код, который вы дали. Почему код показывает ошибки в операторе select, так как предыдущий оператор не показывал никаких ошибок>

Member 12882545

Я могу просмотреть результат только с помощью запроса ниже. Если я намерен добавить еще один оператор sql select, то результатом будет ошибка

объявить таблицу @MyTable(

[Общий процент] деньги

)

вставить в @MyTable

Выберите sum([сумма просроченных процентов(мыр)]), а [общая сумма процентов просроченной(мыр)] из (выбрать сумма(Л. Д. interestOverdue) * д. bidspotrate как [Итого проценты просроченные(мыр)] в кредит а л внутреннее соединение Danadb А Д О Л.валюта = д.группа ccycode д. bidspotrate) как [Итого в мире]


выберите [тип], [Итого] из
(выбрать * из таблицы mytable) ФОК
оператор unpivot ([общего] для [тип] в ([общий интерес])) Res

Member 12882545

Все нормально , :) Я уже получил ответ, который мне нужен . Большое вам спасибо за вашу помощь :)