c# - 带有数据透视表的 CTE

标签 c# sql sql-server pivot common-table-expression

我有一张 table :TblMemberPosition

运行一段sql代码-

with cte(MemberID, SponserID, Level)
  as 
    (
      select MemberID, SponserID, 1 as Level
        from TblMemberPosition
        where MemberID = 10021
      union all
      select a.MemberID, a.SponserID , Level + 1
        from TblMemberPosition as a
        inner join cte as b
          on b.MemberID = a.SponserID  
    ) 
  select (count (MemberID)) as MemberCount, Level
    From cte
    where Level <= 8
    Group by Level 
    order by Level

上述查询结果:

MemberCount Level
1             1
1             2
3             3
1             4
2             5
1             6
1             7
2             8

但我想要输出 Like -

MemberID    Level1   Level 2    Level 3  Level 4 .... Level upto 9
10021        1         1          3        1

此代码是为单个 MemberId 生成的。你能帮助为所有成员生成这个结构吗?

最佳答案

with cte(MemberID, SponserID, Level)
as 
(
 select MemberID, SponserID,1 as Level from TblMemberPosition
 where MemberID = 10021
   union all
  select a.MemberID,a.SponserID,Level + 1 from TblMemberPosition
   as a inner join cte as b on b.MemberID = a.SponserID  
 ), 
ctePivotSource as (
   select 
       (count (MemberID)) as MemberCount,
       'Level ' + convert(varchar(1),[Level]) as [Level]
   from cte
   where Level <=8
   group by level
)
select *
from 
    ( select [MemberID],[MemberCount],[Level] from ctePivotSource) src
pivot 
( 
  sum(src.MemberCount) FOR [Level] in ([Level 1],[Level 2],[Level 3],[Level 4],[Level 5],[Level 6],[Level 7],[Level 8])
) as pvt

您的原始查询将列限制为 8(而不是所需结果中的 9),因此我也将数据透视限制为 8 列。

关于c# - 带有数据透视表的 CTE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37906211/

相关文章:

c# - 抽象基类或辅助类

java - 我无法在代码中使用任何 ID

sql-server - 为什么 SQL Server 在事件日志中每秒两次显示 "Starting Up Database"?

sql-server - SSIS 连接管理器 - Azure SQL 数据库间歇性故障

mysql - SQL Server 等同于 MySQL OPTIMIZE 命令的是什么?

c# - 您是否授予用户访问您的数据库的权限,或者是否通过共享用户名执行查询

c# - 无法序列化和反序列化UserControl

c# - 如何获取字体文件名?

mysql - 执行 SQL 脚本时出错,但单独运行时不会出错

mysql - 如何删除曾经具有特定值的实例?