And*_*ier 7 sql sql-server aggregate
我有一个SQL Server表,其中包含这样的记录
1 | 100
2 | 150
3 | 250
4 | 600
5 | 1550
6 | 50
7 | 300
Run Code Online (Sandbox Code Playgroud)
我需要选择随机记录,但唯一的条件是该记录值的总和达到我定义的特定数量或百分比.
1 | 100
2 | 150
6 | 50
Run Code Online (Sandbox Code Playgroud)
3 | 250
6 | 50
Run Code Online (Sandbox Code Playgroud)
7 | 300
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助我这样做.
小智 4
认为这个递归 CTE 有效,但不知道一旦你超过了少量的行,性能会是什么样:
DECLARE @Test TABLE
(
ID INT NOT NULL,
VAL INT NOT NULL
);
INSERT INTO @Test
VALUES (1,100),
(2,150),
(3,250),
(4,600),
(5,1550),
(6,50),
(7,300);
DECLARE @SumValue INT = 300,
@Percentage INT = 10;
WITH GetSums
AS
(
SELECT T.ID,
T.Val,
CAST(T.ID AS VARCHAR(MAX)) AS IDs
FROM @Test AS T
UNION ALL
SELECT T1.ID,
T1.Val + GS.Val AS Val,
CAST(T1.ID AS VARCHAR(MAX)) + ',' + GS.IDs AS IDs
FROM @Test AS T1
INNER
JOIN GetSums AS GS
ON T1.ID > GS.ID
)
SELECT GS.IDs,
GS.Val
FROM GetSums AS GS
WHERE (GS.Val = @SumValue OR GS.VAL = (SELECT SUM(Val) FROM @Test AS T) / @Percentage)
OPTION (MAXRECURSION 50);
Run Code Online (Sandbox Code Playgroud)
类似的发现在这里:
归档时间: |
|
查看次数: |
90 次 |
最近记录: |