【问题标题】:Modifying Roll Up SQL修改汇总 SQL
【发布时间】:2018-06-27 01:56:39
【问题描述】:

我有这个 SQL:

DECLARE @table TABLE(col1 INT, col2 FLOAT);

INSERT INTO @table  (col1, col2) 
VALUES (1, 500), (2, 499), (3, 200), (4, 50), (5, 10), (6, 5)

DECLARE @col2total FLOAT = (SELECT SUM(col2) FROM @table)

-- Using subqueries
SELECT      col1, 
            col2, 
            (SELECT SUM(col2) FROM @table sub WHERE sub.col1 <= base.col1) 
            / @col2total
            * 100 AS RunningPercentage
FROM        @table base
ORDER BY    col1

-- Using cross join
SELECT      t1.col1,
            t1.col2,
            SUM (t2.col2) RunningTotal,
            SUM (t2.col2) / @col2total * 100 RunningPercentage
FROM        @table t1 CROSS JOIN @table t2
WHERE       t1.col1 >= t2.col1
GROUP BY    t1.col1, t1.col2
ORDER BY    t1.col1

此代码将汇总一个计数,并为该汇总中的特定点提供一个百分比。

我的问题: 该脚本需要对初始值进行硬编码。如何使用 SQL 语句从 SQL 数据库中的表中提取值来执行此操作?

换句话说,发件人:

INSERT INTO @table (col1, col2) 
VALUES (1, 500), (2, 499), (3, 200), (4, 50), (5, 10), (6, 5)

从下面删除“值”部分并将其替换为“从 [表名称] 中选择 [字段名称]

【问题讨论】:

    标签: sql sql-server tsql group-by rollup


    【解决方案1】:

    您正在从选择语法中寻找插入

    INSERT INTO @table (col1, col2) 
    select col1, col2 
      from Sourcetable --replace it with your sourcetable name
    

    另外,如果您使用的是sql server 2012+,那么这里是一种计算运行总计的有效方法

    SELECT col1,
           col2,
           RunningTotal = Sum(col2)OVER(ORDER BY col1),
           RunningPercentage = Sum(col2)OVER(ORDER BY col1) / Sum(col2)OVER() * 100
    FROM   @table base
    ORDER  BY col1 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多