我正在尝试对表中的结果进行计数,然后将计数的总数放入同一表中的字段中,但是我得到的总数是针对整个表而不是特定的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;