交叉表删除重复的行

时间:2016-02-23 19:47:57

标签: sql postgresql

似乎无法找到跨越标签数据结果的sql逻辑。

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

Dept1 . Bob
Dept2 . Mark
Dept1 . Bill
Dept2 . Carol
Dept3 . Amy
Dept1 . Melissa
Dept1 . John

我想在输出中看到的是

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

2 个答案:

答案 0 :(得分:0)

如果您使用的是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];

结果:

enter image description here

答案 1 :(得分:0)

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

感谢您的回复。