Как ограничить выбор в SQL Server суммой столбца? - PullRequest
1 голос
/ 21 сентября 2011

Можно ли ограничить количество строк суммой столбца в базе данных SQL Server?

Например:

Type | Time (in minutes)
-------------------------
A    | 50
B    | 10
C    | 30
D    | 20
E    | 70
...

И я хочу ограничить выбор по сумме времени.Например максимум 100 минут.Таблица должна выглядеть так:

Type | Time (in minutes)
-------------------------
A    | 50
B    | 10
C    | 30

Есть идеи?Спасибо.

1 Ответ

2 голосов
/ 21 сентября 2011
DECLARE @T TABLE
(
[Type] CHAR(1) PRIMARY KEY,
[Time] INT
)
INSERT INTO @T
SELECT 'A',50 UNION ALL
SELECT 'B',10 UNION ALL
SELECT 'C',30 UNION ALL
SELECT 'D',20 UNION ALL
SELECT 'E',70;


WITH    RecursiveCTE
AS      (
        SELECT TOP 1 [Type], [Time], CAST([Time] AS BIGINT) AS Total
        FROM @T
        ORDER BY [Type]
        UNION   ALL
        SELECT  R.[Type], R.[Time], R.Total
        FROM    (
                SELECT  T.*,
                        T.[Time] + Total AS Total,
                        rn = ROW_NUMBER() OVER (ORDER BY T.[Type])
                FROM    @T T
                JOIN    RecursiveCTE R
                        ON  R.[Type] < T.[Type]
                ) R
        WHERE   R.rn = 1 AND Total <= 100
        )
SELECT  [Type], [Time], Total
FROM    RecursiveCTE
OPTION  (MAXRECURSION 0);

Или, если ваш стол маленький

SELECT t1.[Type],
       t1.[Time],
       SUM(t2.[Time])
FROM @T t1
 JOIN @T t2
ON t2.[Type] <= t1.[Type]
GROUP BY t1.[Type],t1.[Time]
HAVING SUM(t2.[Time]) <=100
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...