Sql 求总值直到达到某一点
我正在努力做到以下几点:Sql 求总值直到达到某一点,sql,sql-server,tsql,ssms,Sql,Sql Server,Tsql,Ssms,我正在努力做到以下几点: 按具有最高值的DIVLOC和DISTRIB订购记录 然后对每个DIVLOC的DISTRIB进行汇总,直到它达到>=.60 对于每个DIVLOC60的记录,打开ETAFLAG=1 下面是我的结果示例 -- --Create Fake table DECLARE @ETATRACTS TABLE (DIVLOC int, TRACTID int, Distrib float, ETAFLAG bit) INSERT INTO @ETATRACTS VALUES (710
DIVLOC
和DISTRIB
订购记录DIVLOC
的DISTRIB
进行汇总,直到它达到>=.60DIVLOC
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
您可以为此编写
选择查询:
select e.*,
(case when sum(Distrib) over (partition by divloc order by Distrib desc) - Distrib < 0.6
then 1 else 0
end) as ETAFLAG
from @ETATRACTS e;
这太愚蠢了,但当我运行你建议的代码时,我得到了一个错误:Msg 102,15级,状态1,第28行“order”附近的语法不正确。@Bearcatrunner。所有受支持的SQL Server版本都支持累积和。您可能正在使用不受支持的版本,或者已将兼容性设置为早期版本。
with toupdate (
select e.*,
(case when sum(Distrib) over (partition by divloc order by Distrib desc) - Distrib < 0.6
then 1 else 0
end) as new_ETAFLAG
from @ETATRACTS e
)
update toupdate
set new_ETAFLAG = ETAFLAG;