SQL使用WITH和JOIN一起有效地创建视图

时间:2015-12-01 16:27:36

标签: sql sql-server sql-server-express

我试图使用一个名为period的表中的数据来指定日期所属的时间段,然后使用该实例使用以下语句连接到另一个表中。

WITH rep_prod AS (
    SELECT t.tran_num, t.amount, t.provider_id, t.clinic, 
    t.tran_date, t.type, t.impacts, p.period_id, p.fiscal_year, p.period_weeks
    FROM transactions t, period p
    WHERE tran_date BETWEEN period_start AND period_end
)

SELECT r.tran_num, r.amount, r.provider_id, d.first_name, d.last_name, 
d.clinic, r.tran_date, r.period_id, r.period_weeks, r.type, r.impacts
FROM rep_prod AS r
INNER JOIN provider AS d
ON r.provider_id = d.provider_id AND r.clinic = d.clinic

想要在我的数据库中创建这个视图,有没有更有效的方法来实现这一目标?目前这个行数约为620万行,而且只会继续变大。仅此查询需要7分钟才能完成,因为我已经使用了具有内存限制的SQL Express。

更新:更改查询以反映SELECT DISTINCT功能的删除

编辑:@Rabbit所以你建议这样的事情?

SELECT t.tran_num, t.amount, t.provider_id, d.first_name, d.last_name, 
d.clinic, t.tran_date, p.period_id, p.period_weeks, p.fiscal_year, p.period_start, p.period_end, t.type, t.impacts
FROM transactions t
    INNER JOIN provider d
        ON provider.provider_id = transactions.provider_id AND provider.clinic = transactions.clinic
    INNER JOIN period p
        ON t.tran_date BETWEEN p.period_start AND p.period_end

0 个答案:

没有答案