如何在同一个 Table 数据集中计数和求和成为 Parent 数据集
How To Count and Sum in Same Table To Become Parent Dataset
这是从 关于查询前三个参考 ID 的扩展。由于 "level" 列变为动态,我需要在 gridview 上显示时保留它。
我计划创建 2 个数据集(Parent 和 Child)。
1)
关于 Child 数据集已经有如下答案(感谢 Rudolf):-
Table 测试
ID Name RefID
A AAAA null
B BBBB A
C CCCC B
D DDDD C
E EEEE D
F FFFF E
Sql声明
select ID, 'Level(' + cast(level as varchar(255)) + ')' GroupLevel, RefID from (
select t0.ID,
case level.level
when 1 then t1.ID
when 2 then t2.ID
when 3 then t3.ID
end RefID,
level.level
from Test t0
left outer join Test t1 on t1.RefID = t0.ID
left outer join Test t2 on t2.RefID = t1.ID
left outer join Test t3 on t3.RefID = t2.ID
cross join (
select 1 level union all
select 2 union all
select 3
) level
) t
where t.RefID is not null
输出:
ID | GroupLevel | RefID |
---+------------+-------+
A | Level(1) | B |
A | Level(2) | C |
A | Level(3) | D |
B | Level(1) | C |
B | Level(2) | D |
B | Level(3) | E |
C | Level(1) | D |
C | Level(2) | E |
D | Level(1) | E |
现在我需要创建 Parent 数据集,如下所示:-
在 GridView 中使用“+”和“-”输出
Introducer Level Total Id
A Level (1) 2
- Id Name
-- -----
B BBBB
C CCCC
A Level(2) 1
- Id Name
-- -----
D DDDD
在此之前,我需要使用 Count(*) 创建 sql 语句以获取上面基于 table 的总 ID。我尝试了很多次将它放在 Rudolf 语句上,但可以正确地得到总数:-
select ID,
'Level(' + cast(level as varchar(255)) + ')' GroupLevel,
RefID,
*second try - result error
count(*) as reccount*
from (
select t0.ID,
case level.level
when 1 then t1.ID
when 2 then t2.ID
when 3 then t3.ID
end RefID,
*first try - result count double
count(*) as reccount*
level.level
from Test t0
left outer join Test t1 on t1.RefID = t0.ID
left outer join Test t2 on t2.RefID = t1.ID
left outer join Test t3 on t3.RefID = t2.ID
cross join (
select 1 level union all
select 2 union all
select 3
) level
) t
where t.RefID is not null
我可以弄清楚在哪里放置计数语句以获得基于总记录的级别组。
2)
我还需要从任何相关 table 添加列和总和值。假设我有 table child 每个 id,如下所示:-
Table Child
ID Date Join Child
B XX/XX/XXXX 2
C XX/XX/XXXX 5
我的期望输出应该是:-
Introducer Level Total Id Total Child
A Level (1) 2 7
- Id Name Date Join Child
-- ---- --------- -----
B BBBB XX/XX/XX 2
C CCCC XX/XX/XX 5
A Level(2) 1 0
- Id Name Date Join Child
-- ---- --------- ------
D DDDD XX/XX/XX Null
非常感谢并提前感谢您抽出宝贵时间阅读此主题,希望遇到此问题的任何人都对此问题有解决方案,请与我分享。
谢谢。
我找到了问题 2 的答案
" 我还需要从任何相关的 table 添加列和总和值。假设我对每个 ID 都有 table child,如下所示:-
Table Child
ID Date Join Child
B XX/XX/XXXX 2
C XX/XX/XXXX 5
在 sql 声明中我输入:-
.....
(Select
1 As level
union All
Select
2
union All
Select
3) level) t Left Join
child On t.RefID = child.memberid
......
我在哪里得到我想要的输出如下:-
Id Name Date Join Child
-- ---- --------- -----
B BBBB XX/XX/XX 2
C CCCC XX/XX/XX 5
通过使用 Left Join 我可以扫描并显示所有与 RefID 相关的 Table Child 要么存在于 not as Child 数据集上。
我还需要显示 child = 0 如果找不到记录 在 Table Child 中,而不是 null 或空白值。
如果你们都可以改进这个解决方案,我将不胜感激。也许有其他 sql 声明比这更有效和更快。
而且,请帮我弄清楚 Parent 数据集上的 COUNT 和 SUM。我仍然不知道如何克服这个问题。
谢谢。
这是从
我计划创建 2 个数据集(Parent 和 Child)。
1)
关于 Child 数据集已经有如下答案(感谢 Rudolf):-
Table 测试
ID Name RefID
A AAAA null
B BBBB A
C CCCC B
D DDDD C
E EEEE D
F FFFF E
Sql声明
select ID, 'Level(' + cast(level as varchar(255)) + ')' GroupLevel, RefID from (
select t0.ID,
case level.level
when 1 then t1.ID
when 2 then t2.ID
when 3 then t3.ID
end RefID,
level.level
from Test t0
left outer join Test t1 on t1.RefID = t0.ID
left outer join Test t2 on t2.RefID = t1.ID
left outer join Test t3 on t3.RefID = t2.ID
cross join (
select 1 level union all
select 2 union all
select 3
) level
) t
where t.RefID is not null
输出:
ID | GroupLevel | RefID |
---+------------+-------+
A | Level(1) | B |
A | Level(2) | C |
A | Level(3) | D |
B | Level(1) | C |
B | Level(2) | D |
B | Level(3) | E |
C | Level(1) | D |
C | Level(2) | E |
D | Level(1) | E |
现在我需要创建 Parent 数据集,如下所示:-
在 GridView 中使用“+”和“-”输出
Introducer Level Total Id
A Level (1) 2
- Id Name
-- -----
B BBBB
C CCCC
A Level(2) 1
- Id Name
-- -----
D DDDD
在此之前,我需要使用 Count(*) 创建 sql 语句以获取上面基于 table 的总 ID。我尝试了很多次将它放在 Rudolf 语句上,但可以正确地得到总数:-
select ID,
'Level(' + cast(level as varchar(255)) + ')' GroupLevel,
RefID,
*second try - result error
count(*) as reccount*
from (
select t0.ID,
case level.level
when 1 then t1.ID
when 2 then t2.ID
when 3 then t3.ID
end RefID,
*first try - result count double
count(*) as reccount*
level.level
from Test t0
left outer join Test t1 on t1.RefID = t0.ID
left outer join Test t2 on t2.RefID = t1.ID
left outer join Test t3 on t3.RefID = t2.ID
cross join (
select 1 level union all
select 2 union all
select 3
) level
) t
where t.RefID is not null
我可以弄清楚在哪里放置计数语句以获得基于总记录的级别组。
2)
我还需要从任何相关 table 添加列和总和值。假设我有 table child 每个 id,如下所示:-
Table Child
ID Date Join Child
B XX/XX/XXXX 2
C XX/XX/XXXX 5
我的期望输出应该是:-
Introducer Level Total Id Total Child
A Level (1) 2 7
- Id Name Date Join Child
-- ---- --------- -----
B BBBB XX/XX/XX 2
C CCCC XX/XX/XX 5
A Level(2) 1 0
- Id Name Date Join Child
-- ---- --------- ------
D DDDD XX/XX/XX Null
非常感谢并提前感谢您抽出宝贵时间阅读此主题,希望遇到此问题的任何人都对此问题有解决方案,请与我分享。
谢谢。
我找到了问题 2 的答案
" 我还需要从任何相关的 table 添加列和总和值。假设我对每个 ID 都有 table child,如下所示:-
Table Child
ID Date Join Child
B XX/XX/XXXX 2
C XX/XX/XXXX 5
在 sql 声明中我输入:-
.....
(Select
1 As level
union All
Select
2
union All
Select
3) level) t Left Join
child On t.RefID = child.memberid
......
我在哪里得到我想要的输出如下:-
Id Name Date Join Child
-- ---- --------- -----
B BBBB XX/XX/XX 2
C CCCC XX/XX/XX 5
通过使用 Left Join 我可以扫描并显示所有与 RefID 相关的 Table Child 要么存在于 not as Child 数据集上。
我还需要显示 child = 0 如果找不到记录 在 Table Child 中,而不是 null 或空白值。
如果你们都可以改进这个解决方案,我将不胜感激。也许有其他 sql 声明比这更有效和更快。
而且,请帮我弄清楚 Parent 数据集上的 COUNT 和 SUM。我仍然不知道如何克服这个问题。
谢谢。