【问题标题】:group_concat in SQL Server 2008 [duplicate]SQL Server 2008 中的 group_concat [重复]
【发布时间】:2012-02-15 10:31:56
【问题描述】:

可能重复:
Combine multiple results in a subquery into a single comma-separated value
Concat groups in SQL Server

我希望能够删除重复项

SELECT Count(Data) as Cnt, Id
FROM [db].[dbo].[View_myView]
Group By Data
HAVING Count(Data) > 1

在 MySQL 中就这么简单:

SELECT Count(Data), group_concat(Id)
FROM View_myView
Group By Data
Having Cnt > 1

有人知道解决方案吗?例子是加分项!

【问题讨论】:

  • 你不能group by 在聚合函数中使用的东西。我想你的意思是group by id
  • 我正在尝试从数据库中删除副本。 MSSQL 并没有让这变得简单,这是过度“搜索”并一直用于 DB 任务中的任何地方。首先应该有一种方法可以防止重复,但这不是我的数据库和应用程序。

标签: sql-server-2008


【解决方案1】:

在 SQL Server 2005 及更高版本中,您可以使用带有 ROW_NUMBER 函数的 CTE(公用表表达式)来消除重复项:

;WITH LastPerUser AS
(
   SELECT 
       ID, UserID, ClassID, SchoolID, Created,
       ROW_NUMBER() OVER(PARTITION BY UserID ORDER BY Created DESC) AS 'RowNum'
   FROM dbo.YourTable
)
SELECT 
   ID, UserID, ClassID, SchoolID, Created,
FROM LastPerUser
WHERE RowNum = 1

此 CTE 按UserID 对您的数据进行“分区”,对于每个分区,ROW_NUMBER 函数分配从 1 开始并按 Created DESC 排序的序列号 - 因此最新的行获得 RowNum = 1(对于每个UserID),这是我在它之后的 SELECT 语句中从 CTE 中选择的。

使用相同的 CTE,您还可以轻松删除重复项:

;WITH LastPerUser AS
(
   SELECT 
       ID, UserID, ClassID, SchoolID, Created,
       ROW_NUMBER() OVER(PARTITION BY UserID ORDER BY Created DESC) AS 'RowNum'
   FROM dbo.YourTable
)
DELETE FROM dbo.YourTable t
FROM LastPerUser cte
WHERE t.ID = cte.ID AND cte.RowNum > 1

同样的原则适用:您按某些标准“分组”(或分区)您的数据,您连续编号每个数据分区的所有行,并且“分区行号”值大于 1 的那些被淘汰DELETE

【讨论】:

    【解决方案2】:

    只需使用distinct 即可删除重复项。听起来您在使用 group_concat 来加入重复项,但实际上并不想使用它的值。在这种情况下,MySQL 也有一个 distinct,您可能一直在使用:

    SELECT DISTINCT Count(Data) as Cnt, Id
    FROM [db].[dbo].[View_myView]
    GROUP BY Id
    HAVING Count(Data) > 1
    

    另外,你不能group by 在聚合函数中使用的东西;我想你的意思是group by id。我在上面的例子中更正了它。

    【讨论】:

    • 谢谢@Justin Satyr!我的意图是使用数据列进行分组。显然,MSSQL 不允许您这样做。我正在从 MySQL 迁移到 MSSQL。我想我被宠坏了!
    猜你喜欢
    • 2012-02-10
    • 2020-03-09
    • 2013-10-07
    • 1970-01-01
    • 2013-06-15
    • 2017-09-07
    • 1970-01-01
    • 2012-12-18
    相关资源
    最近更新 更多