You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何为采购记录表添加客户专属的唯一采购序列列?

如何为采购记录表添加客户专属的唯一采购序列列?

看起来你已经找对方向了——用ROW_NUMBER()窗口函数是正确思路,但差了最关键的一步:没有按客户分组生成专属序列。我来帮你调整一下!

你之前的写法ROW_NUMBER() OVER (ORDER BY CustID, Item)是给整个表按客户和商品排序生成全局序列,而我们需要的是每个客户单独拥有自己的序列,这时候就得用上PARTITION BY子句来拆分数据集。

正确的SQL语句

假设你的采购表名为purchases,可以用下面的查询来生成想要的结果:

SELECT 
    Idx,
    CustID,
    Item,
    Date,
    ROW_NUMBER() OVER (PARTITION BY CustID ORDER BY Date) AS Sequence
FROM purchases
ORDER BY CustID, Sequence;

关键部分解释

  • PARTITION BY CustID:这是核心!它会把整个表格的数据按照CustID拆分成独立的分组,每个客户对应一个分组,序列会在每个分组内单独计算。
  • ORDER BY Date:在每个客户的分组里,我们按照采购日期的先后排序,这样生成的序列就能对应客户的采购顺序了。
  • 最后的ORDER BY CustID, Sequence是为了让输出结果和你期望的格式一致,按客户和序列值排序展示。

执行后的结果

运行上面的查询后,你会得到和你预期完全一致的表格:

IdxCustIDItemDateSequence
11Black Ink2023-01-011
31Black Ink2023-01-122
22Red Ink2023-01-211
42Red ink2023-02-142

备注:内容来源于stack exchange,提问作者Seamus

火山引擎 最新活动