Sql server SQL Server确定组中大多数数据的发生率
假设我有以下几点:Sql server SQL Server确定组中大多数数据的发生率,sql-server,sql-server-2012,grouping,Sql Server,Sql Server 2012,Grouping,假设我有以下几点: COL1 COL2 COL3 ABC DATA1 ABC DATA1 ABC DATA2 ABC DATA3 DEF INFO1 DEF INFO2 DEF INFO3 DEF INFO3 我想使用SQL将组中最常出现的值传播到该组的COL3中。因此,我的结果是: COL1 COL2 COL
COL1 COL2 COL3
ABC DATA1
ABC DATA1
ABC DATA2
ABC DATA3
DEF INFO1
DEF INFO2
DEF INFO3
DEF INFO3
我想使用SQL将组中最常出现的值传播到该组的COL3中。因此,我的结果是:
COL1 COL2 COL3
ABC DATA1 DATA1
ABC DATA1 DATA1
ABC DATA2 DATA1
ABC DATA3 DATA1
DEF INFO1 INFO3
DEF INFO2 INFO3
DEF INFO3 INFO3
DEF INFO3 INFO3
有什么想法吗?SQL Server 2012。我会这样写:
;With cte
as
(
col1,col2,row_number() over (partition by col1,col2 order by col1) as rownum
)
select col1,col2,b.col2 as col3
from yourtable t
cross apply
( select top1 col2 from cte c where c.col1=t.col1 order by rownum desc) b
UPDATE P SET P.Col3=T.Col2
FROM Propagation P
JOIN(
SELECT TOP 1 WITH TIES Col1, Col2
FROM Propagation
GROUP BY Col1, Col2
ORDER BY COUNT(*) DESC
) T ON T.Col1=P.Col1
谢谢大家!我用了一系列的答案让它起作用。以下是我的想法:
WITH OCCUR_EXT
as
(
SELECT [COL1], [COL2], row_number() over (partition by [COL1], [COL2] order by [COL1]) as TOT_OCCUR
FROM [T_TABLEDATA]
WHERE [COL2] > ''
),
DOM_ASSGN
as
(
SELECT *
FROM
(SELECT *,
row_number()
OVER
(partition by [COL1] order by [COL1], TOT_OCCUR DESC) as ROW_NMBR
FROM OCCUR_EXT ) source
WHERE ROW_NMBR = 1
)
UPDATE [T_TABLEDATA]
SET [T_TABLEDATA].[COL3] = [DOM_ASSGN].[COL2]
FROM [T_TABLEDATA], [DOM_ASSGN]
WHERE [T_TABLEDATA].[COL1] = [DOM_ASSGN].[COL1]
GO
到目前为止你尝试了什么?我们帮助修复代码,我们不是来为您解决问题的。领带是如何解决的?对不起,马克-我只是不知道从哪里开始。领带很好-两种选择都同样有效谢谢!这很有帮助!谢谢我得出的答案是这两个答案的组合。