gpt4 book ai didi

sql - 基于分组依据、前 1 行和 where case 进行更新

转载 作者:行者123 更新时间:2023-12-04 23:47:23 24 4
gpt4 key购买 nike

我有一个表如下:
table select

这是这个选择的结果:

SELECT ParentID, ID, [Default], IsOnTop, OrderBy
FROM [table]
WHERE ParentID IN (SELECT ParentID
FROM [table]
GROUP BY ParentID
HAVING SUM([Default]) <> 1)
ORDER BY ParentID

现在,我想做的是:对于每个 ParentID组,将其中一行设置为默认值 ( [Default] = 1 ),其中使用以下逻辑选择行:
如果组有一行 IsOnTop = 1然后取这一行,否则取按 OrderBy 排序的前 1 行.
我完全不知道如何在 SQL 中做到这一点,而且我有 40 多个这样的组,因此我想向您寻求帮助,最好对您的查询进行一些解释。

最佳答案

只需通过为每个 ParentID 分配一个行号来稍微修改您当前的查询团体。行号分配的排序逻辑是 IsOnTop 的记录首先是 1 的值,然后是 OrderBy列决定位置。我在每个 ParentID 中只有第一条记录的情况下更新 CTE组被分配了一个 Default值 1。

WITH cte AS (
SELECT ParentID, ID, [Default], IsOnTop, OrderBy,
ROW_NUMBER() OVER (PARTITION BY ParentID
ORDER BY IsOnTop DESC, OrderBy) rn
FROM [table]
WHERE ParentID IN (SELECT ParentID FROM [table]
GROUP BY ParentID HAVING SUM([Default]) <> 1)
)

UPDATE cte
SET [Default] = 1
WHERE rn = 1;

关于sql - 基于分组依据、前 1 行和 where case 进行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48624351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com