【问题标题】:Inserting values into new column based on a LEAD () function基于 LEAD () 函数将值插入新列
【发布时间】:2022-08-20 06:47:41
【问题描述】:

我有一个名为 Sales 的列,并创建了一个列 sales_next。我想使用 LEAD 函数将每一行的值基于sales_next。到目前为止我得到了这个,但由于某种原因我无法弄清楚如何更新每一行。

INSERT INTO superstore_sales$ (sales_next)  
VALUES
(
(SELECT TOP 1
    LEAD(sales, 1) OVER (
        ORDER BY sales
    ) AS sales_next
    FROM superstore_sales$
    WHERE sales_next IS NULL
    )) 

我已经尝试删除 TOP 1 并且我在子查询错误中得到了多个值,当然因为我不确定如何告诉 SQL 使用 LEAD 函数为每一行获取一个值。

  • 你为什么要店铺这什么时候可以在查询时生成它?存储它只是意味着您现在需要在每次在其间插入、删除或更新sales 的值时保持更新。
  • 这是我正在做的一个项目的目标,但我同意,好点。谢谢你。

标签: sql sql-server


【解决方案1】:

派生表(或 CTE)是可更新的,如果我了解您要执行的操作,则应该可以:

update t set sales_next = sn
from (
  select sales_next, Lead(sales, 1) OVER (ORDER BY sales) AS sn
  from superstore_sales$
  where sales_next IS null
)t;

【讨论】:

  • 谢谢,效果很好。你能向我解释一下这是如何工作的吗?为什么将 sales_next 列设置为 sn?
  • 我的意思是,superstore_sales$ 是如何更新的,即使命令更新了一个名为 t 的表?我检查并更新了正确的列,只是感到困惑
  • 稍等一下,您正在创建一个名为 T 的派生表,其中包含一个用于更新 superstore_sales$ 的变量。就像一个临时表。知道了。
  • 实际上,它没有用。当需要偏移时,Sales 列的值现在与 sales_next 相同。 The sales_next should be the value of the next row down of Sales.Sales sales_next 22.96 22.96 375.34 375.4575 177.2 177.225 197.97 197.97 854.94 858.24 124.11 124.2 14.4 14.4 575.968 577.764 10.368 10.368 49.12 49.12
【解决方案2】:

我想通了。Aaron 是对的,不需要物理创建列。我只需要查询时间。我弄清楚了 LEAD 和 LAG 是如何运作的,最终的代码很简单:

选择“订单 ID”、“客户名称”、销售、 LEAD(Sales) OVER(ORDER BY Sales) as next_sales FROM superstore_sales$;

谢谢您的帮助:)

【讨论】:

    猜你喜欢
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    • 2021-12-15
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多