2013-02-25 44 views
1

我對派生表有以下SQL查詢,因此我無法創建索引視圖的CLUSTERED INDEX。所以我必須將派生錶轉換爲正常連接。SQL查詢將派生錶轉換爲普通加入(索引視圖)

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

我假設你不只是說把它變成一個'INNER JOIN'。不知道索引視圖的任何內容 - 你可以使用CTE嗎?但除此之外 - 你是否有實際的性能問題(這意味着視圖需要被索引,而不僅僅是由索引表支持的常規視圖)?哦,你應該可以在子查詢中刪除對'dbo.invoice'的引用。 – 2013-02-25 23:44:20

+0

發生了什麼是我可以有一個派生表的示例:左連接(選擇....)它應該是類似的東西:left join dbo.invoice_services .... – VAAA 2013-02-25 23:49:12

+1

什麼版本的SQL Server?那我的其他問題呢? – 2013-02-25 23:51:44

回答

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