我们假设我有table
如下:
LogicalRef Code Balance
1 320.01 11.5
2 320.01 9
3 320.01.03 10
4 320.02 7
5 320.03 0
6 320.03.01 3
7 320.03.01 4
我想获得每个代码的不同代码和总和,以便将子组的总和添加到主组中。因此,SELECT Code, SUM(Balance) FROM table GROUP BY Code
不起作用。
我想得到下表:
Code SUM
320.01 30.5
320.01.03 10
320.02 7
320.03 7
320.03.01 7
我想必须有LIKE Code + '%'
的内容,但到目前为止我找不到任何解决方案。任何帮助将不胜感激。
谢谢!
答案 0 :(得分:0)
您可以使用以下查询:
SELECT LEFT(code, 6) AS Code, SUM(balance) AS SUM
FROM mytable
GROUP BY LEFT(code, 6)
获取code
前两部分的所有组的总和:
Code SUM
-------------
320.01 30.5
320.02 7
320.03 7
然后简单地UNION
包含包含整个代码的组的总和:
SELECT code AS Code, SUM(balance) AS SUM
FROM mytable
WHERE LEN(code) > 6
GROUP BY code
以上查询的输出:
Code SUM
---------------
320.01.03 10
320.03.01 7
将所有内容整合在一起:
SELECT LEFT(code, 6) AS Code, SUM(balance) AS SUM
FROM mytable
GROUP BY LEFT(code, 6)
UNION ALL
SELECT code AS Code, SUM(balance) AS SUM
FROM mytable
WHERE LEN(code) > 6
GROUP BY code
<强>输出:强>
Code SUM
------------------
320.01 30.5
320.02 7
320.03 7
320.01.03 10
320.03.01 7
答案 1 :(得分:0)
我们的想法是生成树(代码,父代),按代码连接到主表并按父级分组。此代码不仅限于测试数据,还可以应用于更复杂的树:
declare @t table(code nvarchar(max), balance money)
insert into @t values
('320.01', 11.5),
('320.01', 9),
('320.01.03', 10),
('320.02', 7),
('320.03', 0),
('320.03.01', 3),
('320.03.01', 4)
;with codes as (select distinct code from @t)
,tree as (select code as parent, code from codes
union all
select t.parent, c.code from codes c join tree t on c.code like t.code + '.%')
select t.parent, sum(c.balance) as balance
from tree t
join @t c on t.code = c.code
group by t.parent