gpt4 book ai didi

sql - 如何使同一项目的多次出现与第一次出现的值不同?

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

我有一个如下所示的数据库:

label_id, scan_type, scan_cost

有些行看起来像这样:

001, A40, 70
001, A40, 70
002, A40, 85
003, A40, 85
003, A40, 85

我需要生成一个如下所示的结果集:

001, A40, 70
001, A40, 0
002, A40, 85
003, A40, 85
003, A40, 0

也就是说,同一 label_id 的任何多次出现然后是 scan_cost列需要设置为 0,但每个 label_id 的第一次出现该值需要保持不变。

label_id如果发生任何变化,则不是连续的。

是否可以在 SQL 中实现这种行为?注意 SQL 方言是 T-SQL,Microsoft SQL Server 2008

最佳答案

此查询返回您要查找的内容:

SELECT
label_id
, scan_type
, CASE WHEN row_number() OVER (PARTITION BY label_id ORDER BY scan_type)=1
THEN scan_cost
ELSE 0
END
FROM test
ORDER BY label_id, scan_type

此解决方案背后的想法是通过 label_id 对数据进行分区,并使用 the ROW_NUMBER function决定保留哪些数据。

我在 ORDER BY 子句中使用了 scan_type,这并不理想。如果您的实际表中有一列数据更适合确定第一行,例如时间戳列,您应该改用其他列。外部 order by 中的第二列需要与内部 order by 中的列相同。

这是在 sqlfiddle 上查询的链接.

关于sql - 如何使同一项目的多次出现与第一次出现的值不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12879253/

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