Отдельные выходные операторы SELECT являются правильными, когда JOINed выходные данные являются неправильными - PullRequest
0 голосов
/ 10 февраля 2019

Я пытался решить проблему в нижнем регистре и в верхнем регистре, оба не удалось.

У меня есть набор банковских данных от FDIC.

Когда я запускаю каждый оператор SELECT отдельно, я получаю правильный вывод:

SELECT
AVG(PCR.lnlsdepr) as NetLoansAndLeasesToDeposits
FROM 
All_Reports_20160331_Performance_and_Condition_Ratios as 
PCR

Выход: (77%)

76.6238024035116

Второй оператор SELECT, запускаемый отдельнотакже правильно (например, выводит сумму денег на банковских счетах с менее чем 250 000 долларов США как 5,2 триллиона долларов США:

SELECT
sum(CAST(LD.IDdepsam as int)) AS 
DepositAccountsWith$LessThan$250k
FROM 
'All_Reports_20160331_Deposits_Based_on_the_
$250,000_Reporting_Threshold' as LD

Правильный вывод: (5 216 146 035 000 долларов США, 5,2 триллионов долларов США)

5216146035

Однако, когдаЯ объединяю два запроса в один запрос, результат второго ввода неверен, например, он выводит общую сумму денег на банковских счетах в США с менее чем 250 000 долларов США в виде 31 квинтиллиона вместо 5,2 триллиона долларов США.

SELECT
AVG(PCR.lnlsdepr) as NetLoansAndLeasesToDeposits,
sum(CAST(LD.IDdepsam as int)) AS 
DepositAccountsWith$LessThan$250k
FROM 
'All_Reports_20160331_Deposits_Based_on_the_$250,000_ 
 Reporting_Threshold' as LD
JOIN 
All_Reports_20160331_Performance_and_Condition_Ratios 
as PCR

Вывод: enter image description here

Я пытался преобразовать все в нижний регистр, но все равно получил неправильный вывод:

select 
avg(pcr.lnlsdepr) as 'NetLoansAndLeASesToDeposits',
sum(cast(ld.IDdepsam as int)) as 
'DepositAccountsWith$LessThan$250k'
from 
'All_Reports_20160331_Deposits_BASed_on_the_
$250,000_Reporting_Threshold' as ld
join 
'All_Reports_20160331_Performance_and_Condition_Ratios' 
as pcr 

Вывод (неверный): enter image description here

Я попробовал UPPERCASE и все еще получил неправильный вывод: enter image description here

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Почему вы объединяете 2 набора данных?Необходимые результаты можно рассчитать отдельно, поскольку они не связаны и представлены в 1 строке следующим образом:

SELECT 
  (SELECT AVG(lnlsdepr)
  FROM All_Reports_20160331_Performance_and_Condition_Ratios) 
  AS NetLoansAndLeasesToDeposits,
  (SELECT sum(CAST(IDdepsam as int))
  FROM 'All_Reports_20160331_Deposits_Based_on_the_$250,000_Reporting_Threshold') 
  AS DepositAccountsWith$LessThan$250k

Таким образом, вам не нужны накладные расходы на объединение.

0 голосов
/ 10 февраля 2019

Проблема в том, что у вас есть несколько строк в каждой таблице, и они умножаются.

SELECT x.NetLoansAndLeasesToDeposits, y."DepositAccountsWith$LessThan$250k"
FROM (SELECT AVG(PCR.lnlsdepr) as NetLoansAndLeasesToDeposits
      FROM 
All_Reports_20160331_Performance_and_Condition_Ratios as 
PCR
     ) x CROSS JOIN
     (SELECT sum(CAST(LD.IDdepsam as int)) AS 
"DepositAccountsWith$LessThan$250k"
      FROM 
"All_Reports_20160331_Deposits_Based_on_the_
$250,000_Reporting_Threshold" LD
     ) y;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...