2013-04-11 4 views
0

Прямоугольный оператор выбора агрегата У меня возникают проблемы. неПрисоединение к другой таблице в выражении выбора Выводы Неправильные более высокие итоговые значения агрегата

Когда я первый запустить этот запрос, никаких проблем:

SELECT distinct 

t2.primary_insurance [Primary Insurance] 
,COUNT(t2.account_number) [Volume] 
,SUM(t2.los) [Total LOS] 
,AVG(t2.los) [Avg LOS] 
,AVG(t1.drg_cost_weight) [Avg CMI] 
,sum(t2.total_charges) [Total Charges] 
,sum(-t2.insurance_receipts) [Total Receipts] 

FROM 
[table1] t1 
LEFT OUTER join 
[table2] t2 
on t1.account_number = t2.account_number 

GROUP BY 
t2.primary_insurance 

order by 
[Primary Insurance] 

Но как только я добавляю Таблица3 агрегировать это данные, он возвращает другой [Volume] всего, что делает все другие итоговые неправильно.

SELECT distinct 

t2.primary_insurance [Primary Insurance] 
,COUNT(t2.account_number) [Volume] 
,SUM(t2.los) [Total LOS] 
,AVG(t2.los) [Avg LOS] 
,AVG(t1.drg_cost_weight) [Avg CMI] 
,sum(t2.total_charges) [Total Charges] 
,sum(-t2.insurance_receipts) [Total Receipts] 
,sum(t3.[direct_cost]) [Direct Cost] 
,sum(t3.[indirect_cost])[Indirect Cost] 
,sum((t3.[direct_cost] + t3.[indirect_cost])) [Total Cost] 
,sum((-t2.insurance_receipts - t3.[direct_cost])) [Contribution Margin] 
,sum((-t2.insurance_receipts - (t3.[direct_cost] + CR.[indirect_cost]))) [Profit] 

from 
[table1] t1 
LEFT OUTER join 
[table2] t2 
on t1.account_number = t2.account_number 
JOIN 
[table3] t3 
on t2.[account_number] = t3.[account_number] 

GROUP BY 
t2.primary_insurance 

order by 
[Primary Insurance] 

Я попытался присоединиться различные способы и, но получаю тот же надутый общий объем и я не могу получить общий объем от первоначального запроса (правильный общего объема). Чтобы быть ясным, проблема в том, что второй запрос дает мне общий объем, который превышает общий объем от первого запроса. Более высокая общая сумма дает мне более высокие итоговые значения для всего остального.

Я также попытался использовать подзапрос для данных таблицы3, но также не могу получить это право.

Два запроса идентичны, за исключением добавления таблицы 3 и суммирования различных данных из этой таблицы. Запрос не выдает ошибку, просто дает неверный итог.

Использование SQL Server 2008

Любой вход или предложения очень ценятся!

+0

Вы уверены, что хотите присоединиться к t3.account_number с t2.account_number. – DevelopmentIsMyPassion

+0

попробуйте сделать t1. [Account_number] = t3. [Account_number] – DevelopmentIsMyPassion

ответ

0

Тогда довольно ясно, что вы дублируете значения на table3, а это значит, что account_number не является основным ключом в этой таблице (и не является уникальным). Вы либо присоединиться к ключу (или набор столбцов, которые являются уникальными для этой таблицы, или вы агрегацию в этой таблице заранее:

SELECT t2.primary_insurance [Primary Insurance] 
     ,COUNT(t2.account_number) [Volume] 
     ,SUM(t2.los) [Total LOS] 
     ,AVG(t2.los) [Avg LOS] 
     ,AVG(t1.drg_cost_weight) [Avg CMI] 
     ,SUM(t2.total_charges) [Total Charges] 
     ,SUM(-t2.insurance_receipts) [Total Receipts] 
     ,SUM(t3.[direct_cost]) [Direct Cost] 
     ,SUM(t3.[indirect_cost])[Indirect Cost] 
     ,SUM((t3.[direct_cost] + t3.[indirect_cost])) [Total Cost] 
     ,SUM((-t2.insurance_receipts - t3.[direct_cost])) [Contribution Margin] 
     ,SUM((-t2.insurance_receipts - (t3.[direct_cost] + CR.[indirect_cost]))) [Profit] 
FROM [table1] t1 
LEFT JOIN [table2] t2 
    ON t1.account_number = t2.account_number 
LEFT JOIN (SELECT [account_number], 
        SUM([direct_cost]) [direct_cost], 
        SUM([indirect_cost]) [indirect_cost] 
      FROM [table3] 
      GROUP BY [account_number]) t3 
    ON t2.[account_number] = t3.[account_number] 
GROUP BY t2.primary_insurance 
ORDER BY [Primary Insurance] 
+0

вы попали ему на голову! Спасибо за вашу помощь! –