異なるテーブルをクエリし、同様のフィールドを返す 2 つの 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