PL/SQL Group By question 添加取决于行号的额外列

Posted

技术标签:

【中文标题】PL/SQL Group By question 添加取决于行号的额外列【英文标题】:PL/SQL Group By question adding extra columns dependent on row numbers 【发布时间】:2021-04-01 07:15:57 【问题描述】:

我正在与一群人斗争。我有一个查询,它为一些已计数的股票提取两行数据。它返回的行是这样的。

但是,我需要将其显示在如下所示的一行中。

此示例仅发生两次计数,但其他示例最多可能有 4 行,因此可能需要 Count 3 和 Count 4 列。计数差异需要是最后一个计数数量 - 第一行原始数量。有一个 dstamp 字段可用于识别每次计数发生的时间。

我用来提取此数据的当前 SQL 如下

Select bin, sku, original_qty, (original_qty + count_qty) countQty, count_difference, quantity, counter
FROM stock_counts
order by bin, dstamp DESC

【问题讨论】:

你怎么知道count 值在count1count2count4 中? stock_counts 表中是否有提供订单的列?也许是约会? 抱歉,是的,我有一个 dstamp 字段。让我知道如果第一个计数。 好的。你怎么知道要显示哪一行的original_qtycountdifferencecounted_by?看起来您正在从一排获取original_qty,从另一排获取countdifference。我猜你是按binsku 对行进行分组? 是的,所以我想按 bin 和 sku 分组,然后原始数量为第一行的原始数量值,然后计数差异为第二行的计数 - 原始数量。 好的。所以countdifference 来自第二行,即使有 4 行? counted_by 是从哪里来的? 【参考方案1】:

您甚至没有在结果中返回dstamp。但是如果你想旋转,你可以使用条件聚合。目前还不清楚所有列的含义。但是您可以使用以下方法轻松地按时间调整数量:

select bin, sku,
       max(case when seqnum = 1 then countQty end) as original_qty,
       max(case when seqnum = 2 then countQty end) as qty1,      
       max(case when seqnum = 3 then countQty end) as qty2,        
       max(case when seqnum = 4 then countQty end) as qty3 
from (select sc.*,
             row_number() over (partition by sku, bin order by dstamp) as seqnum
      from stock_counts sc
     ) sc
group by sku, bin;

当然,您需要有足够多的列来涵盖您关心的数量。

【讨论】:

嗨,谢谢!通过一些调整,我设法让它工作。很抱歉这个措辞不好的问题。

以上是关于PL/SQL Group By question 添加取决于行号的额外列的主要内容,如果未能解决你的问题,请参考以下文章

使用 GROUP BY 和 ORDER BY pl/sql 获取结果集的 N 到 M 行 [重复]

在 XML 字段上执行 pl/sql GROUP BY 会给出“ORA-22806: not an object or REF”

Oracle group by子句按数据顺序排列

在 GROUP BY 之后连接一个字段

Oracle PL/SQL - 根据条件对不同列进行选择、分组、排序、where-clause 的最佳方法?

sql 来自http://stackoverflow.com/questions/34115174/error-related-to-only-full-group-by-when-executing