Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 交叉表以删除重复行_Sql_Postgresql - Fatal编程技术网

Sql 交叉表以删除重复行

Sql 交叉表以删除重复行,sql,postgresql,Sql,Postgresql,似乎找不到跨选项卡数据结果的sql逻辑 假设这是我的数据集,2列(部门名称和名称) 部门1。上下快速移动 部门2。做记号 部门1。比尔 部门2。颂歌 部门3。艾米 部门1。梅丽莎 部门1。约翰 我想在输出中看到的是 列计数将基于部门中的最高人数。如果您使用的是SQL Server 2012,则可以执行以下操作: 假设:每个部门最多有4个名称,并且您使用的是SQL Server 2012 样本数据: CREATE TABLE #temp ([DepartmentName] VARCHAR(20)

似乎找不到跨选项卡数据结果的sql逻辑

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

部门1。上下快速移动 部门2。做记号 部门1。比尔 部门2。颂歌 部门3。艾米 部门1。梅丽莎 部门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];
结果:


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


谢谢您的回复。

您使用的是什么SQL引擎?
 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];