根据group by删除行



假设我有以下表格:

Id | QuestionId
----------------
1 | 'MyQuestionId'
1 | NULL
2 | NULL
2 | NULL

它应该是这样的

  • 查找相同Id的所有结果
  • 如果其中任何一个有QuestionId IS NOT NULL,不要触摸任何行与该Id。
  • 仅当相同Id的所有结果都有QuestionId为NULL时,删除具有该Id的所有行。

所以在这种情况下,它应该只删除Id=2的行。

我在任何地方都没有找到这样的例子。我试过排序,计数,分组,但都不起作用。你能帮我吗?

您可以使用可更新的CTE或派生表,并使用窗口函数计算计数。

WITH cte AS (
SELECT t.*,
CountNonNulls = COUNT(t.QuestionId) OVER (PARTITION BY t.Id)
FROM YourTable t
)
DELETE cte
WHERE CountNonNulls = 0;

,db&lt的在小提琴

请注意,这个查询根本不包含任何自连接。

相关内容

  • 没有找到相关文章

最新更新