我有以下格式的数据。来自不同行的计算列求和值
Column 1
和Value
从数据库中。我使用LEFT()
函数来提取Column 2
。我需要帮助的地方是汇总新计算的Column 2
的值并列出新的列的总和。
任何帮助表示赞赏。谢谢。
我有以下格式的数据。来自不同行的计算列求和值
Column 1
和Value
从数据库中。我使用LEFT()
函数来提取Column 2
。我需要帮助的地方是汇总新计算的Column 2
的值并列出新的列的总和。
任何帮助表示赞赏。谢谢。
基本上,你似乎想对聚集键的功能聚合:
select left(column1, 1), sum(value)
from t
group by left(column1, 1);
可以使用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)
SELECT *
,CalculatedColumn2 = LEFT(Column1,1)
,Value
,CalculatedSum = SUM(Value) OVER (PARTITION BY LEFT(Column1,1))
FROM
Table
尽管戈登的回答得到,如果你想让它每行可以如SUM()OVER使用分区窗口功能是你的总和。
使用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];
添加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可以添加到视图。
谢谢!这工作非常好!祝你感恩节快乐! – Nich
@你的欢迎。如果你的所有设置都不忘记投票给你的答案,并接受一个答案,以便其他人知道你的问题得到了照顾,并获得了荣誉点。祝你感恩节快乐! – Matt