Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 求总值直到达到某一点_Sql_Sql Server_Tsql_Ssms - Fatal编程技术网

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
    进行汇总,直到它达到>=.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
    

    您可以为此编写
    选择
    查询:

    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;