我一直坚持这个问题一段时间,并在网上搜索了答案..
我的问题是:
我在一列中有重复项。我想计算一列中有多少重复项,然后我想用该计数除以一个字段。我希望能够为列中的每个记录执行此操作。
基本上我希望脚本的行为与此类似
重复重复次数 - >将字段A除以重复次数。
示例数据:
t1.Invoiceno | t2.Amount | t2.orderno
-------------------------------------
201412 200 P202
201412 200 P205
302142 500 P232
201412 300 P211
450402 250 P102
450402 250 P142
450402 250 P512
期望的结果:
Invoiceno | Amount | orderno| duplicates|amount_new
-------------------------------------------------
201412 200 P202 2 100
201412 200 P205 2 100
302142 500 P232 1 500
201552 300 P211 1 300
450402 1200 P102 3 400
450402 1200 P142 3 400
450402 1200 P512 3 400
我不想在表格中插入新列,我只想让结果显示两个新列。
答案 0 :(得分:1)
这是一种方式:
select A / dups.dups
from t cross join
(select count(*) as dups
from (select onecol
from t
group by onecol
having count(*) > 1
) o
) dups
编辑:
好吧,现在问题已经澄清到了更合理的地方。您可以使用与上述类似的方法,但dups
子查询需要由invoice
和amount
汇总:
select amount / dups.dups as new_amount
from table t join
(select invoice, amount, count(*) as dups
from table t
) dups
on t.invoice = dups.invoice and t.amount = dups.amount;
答案 1 :(得分:0)
这是另一种方式:
Declare @tempTable Table ( ID int , A int)
INSERT INTO @tempTable VALUES (1, 12)
INSERT INTO @tempTable VALUES (1, 12)
INSERT INTO @tempTable VALUES (2, 20)
INSERT INTO @tempTable VALUES (2, 24)
INSERT INTO @tempTable VALUES (2, 15)
INSERT INTO @tempTable VALUES (3, 10)
INSERT INTO @tempTable VALUES (5, 12)
-------------------------------------------
;WITH DupsCTE (ID, DuplicateCount) AS
(
SELECT ID, COUNT(*) AS DuplicateCount FROM @tempTable GROUP BY ID
)
SELECT t.ID, t.A,
c.DuplicateCount, t.A / c.DuplicateCount AS ModifiedA
FROM
@tempTable t
INNER JOIN DupsCTE c ON c.ID = t.ID