繁体   English   中英

Transact-SQL问题

[英]transact-sql question

假设tableA中有100条记录,并且tableA包含名为“ price”的列。

如果价格总和>一定数量(例如1000)而不使用光标,该如何选择前n条记录?

谢谢

前N个代表某种您未提供的订单,因此我假定了任何随机订单。

您可以在ROW_NUMBER()的OVER子句中更改此设置。

尝试类似

DECLARE @Table TABLE(
        Price FLOAT
)

INSERT INTO @Table SELECT 1
INSERT INTO @Table SELECT 11
INSERT INTO @Table SELECT 12
INSERT INTO @Table SELECT 15
INSERT INTO @Table SELECT 10
INSERT INTO @Table SELECT 65
INSERT INTO @Table SELECT 100

DECLARE @TotalPrice FLOAT
SELECT  @TotalPrice = 100

;WITH Vals AS (
        SELECT  *,
                ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) RNR
        FROM    @Table
)
, Totals AS (
        SELECT  v.RNR,
                SUM(vP.Price) TotalPrice
        FROM    Vals v LEFT JOIN
                Vals vP ON  v.RNR >= vP.RNR
        GROUP BY    v.RNR
)
, LimitValue AS (
        SELECT  TOP 1 
                RNR
        FROM    Totals
        WHERE   TotalPrice >= @TotalPrice
        ORDER BY    RNR
)
SELECT  *
FROM    Vals 
WHERE   RNR <= (
                    SELECT  RNR
                    FROM    LimitValue
                )

从表A中选择价格,其中价格> 1000个限制n;

n-不。 您想要在结果集中的记录数

-干杯

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM