如何在同一个 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。我仍然不知道如何克服这个问题。

谢谢。