将 DISTINCT 值的计数插入到同一表中



我正在尝试对表中的结果进行计数,然后将计数的总数放入同一表中的字段中,但是我得到的总数是针对整个表而不是特定的ID

下面是一些示例数据:

Id  Customer    Invoice#    Count of Invoice
22  12345       6789        
23  777         11223       
24  777         11223
25  777         2341

我需要计算每个客户的 DISTINCT Invoice# 出现多少次,然后将该值放入该客户每一行的发票计数字段中,例如,给定上面的数据发票计数应在第一行为 1,接下来的 3 行应为 2。

我有这个,但它似乎在表中总共计算所有不同的发票#,并在每一行中放置相同的值。

UPDATE [Insight].[dbo].[Rev]
SET [Count of Invoice] = 
(SELECT COUNT(DISTINCT [Invoice#])
FROM [Insight].[dbo].[Rev]
WHERE Customer = Customer)

你需要alias

UPDATE r
SET r.[Count of Invoice] = (SELECT COUNT(DISTINCT r1.[Invoice#])
FROM [Insight].[dbo].[Rev] r1
WHERE r.Customer = r1.Customer)
FROM [Insight].[dbo].[Rev] r;

子查询中的Customer = Customer将根据子查询表进行解析;实际上意味着它将对每一行解析为true(除非Customer的值为NULL(。这应该有效:

UPDATE R
SET [Count of Invoice] = DC.DistinctCount
FROM [Insight].[dbo].[Rev] R
CROSS APPLY (SELECT COUNT(DISTINCT ca.[Invoice#]) AS DistinctCount
FROM [Insight].[dbo].[Rev] ca
WHERE ca.Customer = R.Customer) DC;

最新更新