2013-02-25 4 views
1

У меня есть SQL-запрос following с производной таблицей, и из-за этого я не могу создать CLUSTERED INDEX моего индексированного представления. Поэтому мне нужно преобразовать производную таблицу в обычное соединение.SQL Query Transform Производная таблица для обычного соединения (индексированный просмотр)

SELECT 
...... 
FROM 
dbo.invoice i 

LEFT JOIN 
(
    SELECT SUM(amount) as servicesamount 
    ,ise.invoiceuid 
    ,ise.episodeuid 
    ,ise.memberuid 
    ,ev.caseuid 

    FROM dbo.invoice_services ise 
    JOIN dbo.invoice inv on inv.invoiceuid = ise.invoiceuid 
    JOIN dbo.event ev ON ev.eventuid = ise.episodeuid -- JOIN IN ORDER TO BRING EVENT INVOCIES ONLY (DENTAL INVOICES COULD EXIST) 
    GROUP BY ise.invoiceuid,ise.episodeuid,ise.memberuid,ev.caseuid 

) ise ON ise.invoiceuid = i.invoiceuid 

Любые подсказки о том, как преобразовать

LEFT JOIN 
    (
     SELECT SUM(amount) as servicesamount 
     ,ise.invoiceuid 
     ,ise.episodeuid 
     ,ise.memberuid 
     ,ev.caseuid 

     FROM dbo.invoice_services ise 
     JOIN dbo.invoice inv on inv.invoiceuid = ise.invoiceuid 
     JOIN dbo.event ev ON ev.eventuid = ise.episodeuid -- JOIN IN ORDER TO BRING EVENT INVOCIES ONLY (DENTAL INVOICES COULD EXIST) 
     GROUP BY ise.invoiceuid,ise.episodeuid,ise.memberuid,ev.caseuid 

    ) ise 

к нормальному присоединиться?

Цените это!

+0

Я предполагаю, что вы не просто означает превращение его в 'ВНУТРЕННЕЙ JOIN'. Не знаете ничего об индексированных представлениях - можете ли вы использовать CTE? Но помимо этого - у вас есть реальная проблема с производительностью (это означает, что нужно индексировать представление, а не просто регулярное представление, поддерживаемое индексированными таблицами)? О, вы должны убрать ссылку на 'dbo.invoice' внутри подзапроса. –

+0

Что происходит, так это то, что у меня может быть пример производной таблицы: Left join (select ....) должно быть что-то вроде: left join dbo.invoice_services .... – VAAA

+1

Какая версия SQL Server? А как насчет остальных моих вопросов? –

ответ

0

Вы можете попробовать это

SELECT ... 
    ,SUM(amount) as servicesamount 
    ,ise.invoiceuid 
    ,ise.episodeuid 
    ,ise.memberuid 
    ,ev.caseuid 
    ,... 
FROM dbo.invoice inv 
LEFT JION dbo.invoice_services ise ON inv.invoiceuid = ise.invoiceuid 
LEFT JOIN dbo.event ev ON ev.eventuid = ise.episodeuid 
GROUP BY inv..., ise.invoiceuid,ise.episodeuid,ise.memberuid,ev.caseuid 
Смежные вопросы