我真的不了解T-SQL(2012)OVER和PARTITION BY子句。但是,我想知道是否可以使用OVER将其转换为某些内容,而不是获得我不能理解的另一种解释。或者甚至是其他一些更简洁的语法。
update m
set unique_count =
(
select count(*) from
(
select distinct client_id, member_id, claim_begin_dt
from #claims c
where c.client_id = m.client_id and c.member_id = m.member_id
) r1
)
from #members m
换句话说,我想更新#members中的每条记录,其中包含在唯一日期发生的会员索赔的数量。
顺便说一句,如果上面有语法错误,请忽略它(如果可能)。这是从作品中复制的代码,但我更改了一些名称和内容以使其更清晰。
感谢。
丹
答案 0 :(得分:1)
我认为你想要一个join
而不是窗口函数:
update m
set unique_count = c.cnt
from #members m join
(select client_id, member_id, count(distinct claim_begin_dt) as cnt
from #claims c
group by client_id, member_id
) c
on c.client_id = m.client_id and c.member_id = m.member_id;
这可能不会更快(或者可能更快)。它更简洁一点。
答案 1 :(得分:0)
不幸的是,窗口函数不适用于DISTINCT。有几种方法可以编写查询。这是一个可能更具可读性的:</ p>
UPDATE m
SET unique_count = c.unique_count
FROM #members m
CROSS APPLY (
SELECT
COUNT(DISTINCT claim_begin_dt) unique_count
FROM m
WHERE client_id = m.client_id and member_id = m.member_id
) c