2013-02-25 57 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