2016-11-19 126 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可以添加到視圖。