Sql server 如何在没有主键的情况下从重复的列值中获取第一行
我有一张表,场景如下Sql server 如何在没有主键的情况下从重复的列值中获取第一行,sql-server,Sql Server,我有一张表,场景如下 sku in_stock sold required_stock stock_order_on hrs_to_arrive hrs_to_verify margin sku0001 30 30 0 2/26/2020 17.73 2.36 0.25 sku0001 10 0
sku in_stock sold required_stock stock_order_on hrs_to_arrive hrs_to_verify margin
sku0001 30 30 0 2/26/2020 17.73 2.36 0.25
sku0001 10 0 10 3/11/2020 5.91 0.79 0.25
sku0004 20 12 13 10/12/2019 4.30 0.30 0.1
结果应该是:
sku in_stock sold required_stock stock_order_on hrs_to_arrive hrs_to_verify margin
sku0001 40 30 10 2/26/2020 17.73 2.36 0.25
sku0004 20 12 13 10/12/2019 4.30 0.30 0.1
这是上的库存、已售出所需库存、库存订单和其他列的总和
我可以对每个列执行top 1
查询,但如果列列表增加,我需要添加4子查询
或更多子查询。
min(列)
也不工作,因为列具有int
值。
应该有一种方法可以在单个查询中完成,但我不知道
注意:我需要在**视图**上进行选择查询,它没有**主键**
您可以使用窗口功能:
select t.sku,
sum(t.in_stock) over (partition by t.sku) as in_stock,
sum(t.sold) over (partition by t.sku) as sold,
sum(t.required_stock) over (partition by t.sku) as required_stock,
t.stock_order_on t.hrs_to_arrive, t.hrs_to_verify, t.margin,
row_number() over (partition by t.sku order by t.stock_order_on) as seq
from table t;
因此,可以使用seq
进行过滤:
select t.*
from ( <query>
) t
where seq = 1;
选择t.*
由(
)t
其中,seq=1;
请回答该问题,并包括您自己的一些SQL尝试。