【发布时间】:2013-01-24 19:01:09
【问题描述】:
我有两个查询不同表并返回相似字段的 SQL 查询:
User - Role - Category - Points
和
User - Role - Category - Target
我的查询如下所示:
select
acs.UserID,
acs.RoleID,
acs.CategoryID,
sum(acs.Points)
from acs
和
select
tb.UserID,
tb.RoleID,
tb.CategoryID,
sum(
(
(DATEDIFF(dd, (case when @start >= tb.StartDate then @start else tb.StartDate end), (case when @end <= tb.EndDate then @end else tb.EndDate end)) + 1)
) * tb.dailyMed
) as Target
from tb
我想要的结果是这样的:
User - Role - Category - Points - Target
每个单独的查询运行时间不到 1 秒,但是当我尝试使用内部连接将它们组合起来时,运行时间超过 3 分钟。
我希望有一种更有效的方法,但我似乎找不到。
*编辑 我的内部连接看起来像这样
select
acs.UserID,
acs.RoleID,
acs.CategoryID,
sum(acs.Points),
t.Target
from
dbo.ActualCacheSale acs
inner join
(select
tb.UserID,
tb.RoleID,
tb.CategoryID,
sum(
(
(DATEDIFF(dd, (case when @start >= tb.StartDate then @start else tb.StartDate end), (case when @end <= tb.EndDate then @end else tb.EndDate end)) + 1)
) * tb.dailyMed
) as Target
from
dbo.TargetBucket tb
) t on
t.UserID = acs.UserID and
t.RoleID = acs.RoleID and
t.CategoryID = acs.CategoryID
【问题讨论】:
-
向我们展示您的内部连接查询
-
您能出示您的 INNER JOIN 语句吗?
-
您确定在使用 SUM 函数时不需要 GROUP BY 子句吗?
-
它们在那里,我只是没有将它们包含在我的示例代码中,很抱歉造成混乱
标签: sql sql-server