2016-11-19 128 views
3

我有以下格式的数据。来自不同行的计算列求和值

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

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

任何帮助表示赞赏。谢谢。

回答

2

基本上,你似乎想对聚集键的功能聚合:

select left(column1, 1), sum(value) 
from t 
group by left(column1, 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
SELECT * 
    ,CalculatedColumn2 = LEFT(Column1,1) 
    ,Value 
    ,CalculatedSum = SUM(Value) OVER (PARTITION BY LEFT(Column1,1)) 
FROM 
    Table 

尽管戈登的回答得到,如果你想让它每行可以如SUM()OVER使用分区窗口功能是你的总和。

+0

谢谢!这工作非常好!祝你感恩节快乐! – Nich

+0

@你的欢迎。如果你的所有设置都不忘记投票给你的答案,并接受一个答案,以便其他人知道你的问题得到了照顾,并获得了荣誉点。祝你感恩节快乐! – Matt

1

使用LEFT函数从column1获取第一个字符,并将该结果集用作子查询,并按新列查找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]; 
1

添加computed persisted column其可包含从左边的值(列1,1)。你不要重复你的代码。

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

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

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

您的新持续列可以被索引,您的QRY可以添加到视图。