分类/细分总计数据表

2024-10-02 14:24:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个汇总数据表:

KWid     Orders    Revenue
12345    10        150
23468    5         200

这些数据存储在一个供应商的报告中,但我们正在迁移到一个新的供应商。要接收事务数据,新供应商需要在单行上列出每个订单,即带有5个订单的KWid 23468将显示如下:

KWid     Orders    Revenue   OrderID
23468    1         40        1
23468    1         40        2
23468    1         40        3
23468    1         40        4
23468    1         40        5

注意,5个订单(200个)的总收入在5行中平均分配。此外,必须为每一行创建唯一的订单ID

我以前做过这个,但似乎找不到我的代码。我将如何完成以下规定:

  1. 必须使用SQL Server或Python
  2. 无法包含此解决方案中所示的计数器表(事务太多,无法有效地创建此类表)-disaggregate summarised table in SQL Server 2008

Tags: 数据订单sqlserver报告事务供应商数据表
1条回答
网友
1楼 · 发布于 2024-10-02 14:24:18

加入一个理货台,这就相当直接了。您可以阅读有关计数表here的更多信息

我把它作为我系统的一个视图。这是我的版本

create View [dbo].[cteTally] as

WITH
    E1(N) AS (select 1 from (values (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))dt(n)),
    E2(N) AS (SELECT 1 FROM E1 a, E1 b),  10E+2 or 100 rows
    E4(N) AS (SELECT 1 FROM E2 a, E2 b),  10E+4 or 10,000 rows max
    cteTally(N) AS 
    (
        SELECT  ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM E4
    )
select N from cteTally
GO

下一步,我们需要一个表和您的表,所以我刚刚抛出了快速表变量。在查询中,您可以根据基表编写这个

declare @Something table (KWid int, Orders int, Revenue decimal(7,2))

insert @Something values
    (12345, 10, 150)
    , (23468, 5, 200)

现在我们有问题的设置,这变得相当容易。此查询应生成您所需的数据

select s.KWid
    , OrderNum = t.N 
    , Revenue = convert(numeric(7, 2), round(s.Revenue / s.Orders, 2))
from @Something s
join cteTally t on t.N <= s.Orders
order by s.KWid
    , t.N

相关问题 更多 >