【发布时间】:2019-01-18 00:55:55
【问题描述】:
我正在尝试将数据压缩到一个数据库表中,该表包含多个具有不同列数据的唯一记录实例。
我想为每个列选择出现的最高值 特定的唯一记录
但我的 SQL 事务不工作。
[dataBase1].[dbo].[table1] 有几十万条记录,有几列(Name, Place, etc.)。
[dataBase1].[dbo].[table2] 具有来自[table1] 的唯一名称列表以及其余为空的列(地点等)的标题。
我尝试了以下代码。
DECLARE @name varchar(max);
DECLARE @place varchar(max);
DECLARE db_cursor SCROLL CURSOR FOR
SELECT [Name]
FROM [dataBase1].[dbo].[table2];
OPEN HostName_cursor
FETCH NEXT FROM db_cursor INTO @name;
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT DISTINCT TOP(1) @place = [Place]
FROM [dataBase1].[dbo].[table1]
WHERE [Name] = @name
AND [Place] IS NOT NULL AND [Place] <> ''
AND (EXISTS (SELECT [Place], COUNT (*) AS TOTAL
FROM [dataBase1].[dbo].[table1]
GROUP BY [Place]))
GROUP BY [Place];
UPDATE [dataBase1].[dbo].[table2]
SET [Place] = @place
WHERE [Name] = @name;
SET @place = '';
FETCH NEXT FROM db_cursor INTO @name
END
[Place] 特定的唯一 [Name] 列具有 53 个值,最高重复值计数为 3。本质上,我想为每个唯一的[Name] 自动执行以下 SQL 事务。
SELECT DISTINCT TOP 1
[Place], COUNT (*) TOTAL
FROM
[dataBase1].[dbo].[table1]
WHERE
[Name] = 'xxxxxx'
AND [Place] IS NOT NULL AND [Place] <> ''
GROUP BY [Place]
ORDER BY TOTAL DESC;
【问题讨论】:
-
注意:DISTINCT + GROUP BY 没有意义。删除 DISTINCT。此外,您的查询不关心关系。如果多个位置具有相同的最大计数怎么办?它会随机选择一个。
-
按照你的代码我猜这是 SQL Server。我会换标签。您能否确定 SQL Server 的确切版本,编辑标签并添加它。
-
如果有平局,按字母顺序选择第一个。
-
我使用的是 SQL Server 2017。
标签: sql sql-server sqltransaction