交叉表删除重复行

Posted

技术标签:

【中文标题】交叉表删除重复行【英文标题】:Crosstab to remove duplicate lines 【发布时间】:2016-02-23 19:47:56 【问题描述】:

似乎找不到交叉表数据结果的 sql 逻辑。

假设这是我的数据集,2 列(部门名称和名称)

1 部。鲍勃 部门2。标记 1 部。账单 部门2。颂歌 部门3。艾米 1 部。梅丽莎 1 部。约翰

我想在输出中看到的是

列数将基于部门中的最高人数。

【问题讨论】:

meta.***.com/questions/285551/… 你使用的是什么 SQL 引擎? 【参考方案1】:

如果您使用的是 SQL-Server 2012,您可以这样做:

假设:每个部门最多有 4 个名称,并且您使用的是 SQL-Server 2012

样本数据:

CREATE TABLE #temp ([DepartmentName] VARCHAR(20) , Name VARCHAR(20) )

INSERT INTO #temp
VALUES
('Dept1','Bob'),

('Dept2','Mark'),

('Dept1','Bill'),

('Dept2','Carol'),

('Dept3','Amy'),

('Dept1','Melissa'),

('Dept1','John')

查询:

 SELECT [DepartmentName], [1], [2], [3], [4]
FROM 
(SELECT *,ROW_NUMBER() OVER (PARTITION BY [DepartmentName] ORDER BY [DepartmentName]) AS rn FROM #temp
) p
PIVOT
(
MAX (Name)
FOR rn IN
( [1], [2], [3], [4] )
) AS pvt
ORDER BY pvt.[DepartmentName];

结果:

【讨论】:

【参考方案2】:

这行得通,谢谢。我只是希望有一种方法可以不必创建临时表。比尔可能会更换部门,如果程序自动更新而不是让我更新临时表中的值,那就太好了。

感谢您的回复。

【讨论】:

以上是关于交叉表删除重复行的主要内容,如果未能解决你的问题,请参考以下文章

如何过滤 bigquery 的重复表行数据以删除重复行?

如何删除表中的重复行[重复]

从小表中删除重复行

查询删除临时表中的重复行

Oracle 删除表中的重复行并使用另一个表中的值更新行

sql 删除表中的重复行