从不同行的计算列求和值

时间:2016-11-19 00:39:56

标签: sql sql-server tsql sql-server-2014

我的数据格式如下。

来自数据库的

Column 1Value。我使用LEFT()函数来提取Column 2。我需要帮助的地方是对新计算的Column 2中的值求和,并列出新列的总和。

https://i.stack.imgur.com/WNgkU.png

感谢任何帮助。感谢。

5 个答案:

答案 0 :(得分:2)

基本上,您似乎希望使用聚合键的函数进行聚合:

select left(column1, 1), sum(value)
from t
group by left(column1, 1);

答案 1 :(得分:2)

您可以使用 Windows功能

来实现它

尝试以下查询

SELECT column1
, SUBSTRING(column1,1,1) as [calculated column 2]   
,value
, SUM(value) OVER(PARTITION BY SUBSTRING(column1,1,1)  ) 
FROM table1

您还可以使用LEFT(Column1,1)代替SUBSTRING(column1,1,1)String Functions

答案 2 :(得分:2)

SELECT *
    ,CalculatedColumn2 = LEFT(Column1,1)
    ,Value
    ,CalculatedSum = SUM(Value) OVER (PARTITION BY LEFT(Column1,1))
FROM
    Table

虽然戈登的回答让你得到SUM,如果你想要每行,你可以使用分区窗口函数,例如SUM()OVER。

答案 3 :(得分:1)

使用column1函数从LEFT获取第一个字符,并将该结果集用作子查询,并按新列查找value列组的总和。

<强>查询

SELECT t.[column2], SUM(t.[value]) as [value] FROM(
    SELECT [column1], LEFT([column1], 1) AS [column2], [value]
    FROM [your_table_name]
)t
GROUP BY t.[column2];

答案 4 :(得分:1)

添加computed persisted column,其中包含左侧值(column1,1)。你没有重复你的代码。

alter table tbl add newcomputedcol column (left(column1, 1)) persisted

使用分组subqry或使用over子句:

select 
   *, 
   sum(value) over() over(partition by newcomputedcol) SumPerNewComputedCol
from tbl

您的新持久列可以编入索引,您的qry可以添加到视图中。