【发布时间】:2020-12-24 02:41:18
【问题描述】:
我正在尝试执行以下操作:
- 按
DIVLOC和具有最高值的DISTRIB对记录进行排序 - 然后将每个
DIVLOC的DISTRIB相加,直到达到 >=.60 - 为每个
DIVLOC组成60 条记录的这些记录转为ETAFLAG = 1
所以对于我下面底部的结果示例
-- --Create Fake table
DECLARE @ETATRACTS TABLE (DIVLOC int, TRACTID int, Distrib float, ETAFLAG bit)
INSERT INTO @ETATRACTS VALUES (71001, 1123, .30, 0)
INSERT INTO @ETATRACTS VALUES (71001, 1010, .20, 0)
INSERT INTO @ETATRACTS VALUES (71001, 3010, .10, 0)
INSERT INTO @ETATRACTS VALUES (71001, 0790, .05, 0)
INSERT INTO @ETATRACTS VALUES (71001, 6010, .05, 0)
INSERT INTO @ETATRACTS VALUES (71250, 3010, .40, 0)
INSERT INTO @ETATRACTS VALUES (71250, 0610, .10, 0)
INSERT INTO @ETATRACTS VALUES (71250, 3210, .10, 0)
INSERT INTO @ETATRACTS VALUES (71250, 1920, .05, 0)
INSERT INTO @ETATRACTS VALUES (71250, 9720, .05, 0)
INSERT INTO @ETATRACTS VALUES (71250, 2110, .05, 0)
INSERT INTO @ETATRACTS VALUES (71425, 5011, .20, 0)
INSERT INTO @ETATRACTS VALUES (71425, 5011, .20, 0)
INSERT INTO @ETATRACTS VALUES (71425, 5011, .05, 0)
INSERT INTO @ETATRACTS VALUES (71425, 5011, .05, 0)
INSERT INTO @ETATRACTS VALUES (71425, 5011, .01, 0)
INSERT INTO @ETATRACTS VALUES (71425, 5011, .01, 0)
INSERT INTO @ETATRACTS VALUES (71425, 5011, .01, 0)
INSERT INTO @ETATRACTS VALUES (71425, 5011, .01, 0)
UPDATE @ETATRACTS
SET ETAFLAG = t.ETAFLAG
FROM @ETATRACTS AS temptable,
(SELECT
DIVLOC, TRACTID, Distrib,
(CASE WHEN SUM(Distrib) OVER (PARTITION BY divloc) - Distrib >= 0.2
THEN 1
END) AS ETAFLAG
FROM @ETATRACTS) AS t
WHERE
temptable.divloc = t.DIVLOC AND temptable.TRACTID = t.TRACTID
SELECT * FROM @ETATRACTS
【问题讨论】:
标签: sql sql-server tsql ssms