【问题标题】:Total Aggregate Sum of Each Category Retrieved in the Group By ClauseGroup By 子句中检索到的每个类别的总和
【发布时间】:2019-06-12 11:36:09
【问题描述】:

“我有一个这样的表,我使用 group by 和 sum() 函数来计算 针对在不同地区举行的每种培训类型的参与者总数。现在我想做的是我想要每个培训类型类别的总和,例如:对于 CMST,我想要 CMST 和所有其他类别之后的男性、女性和总参与者的总和像这样:”

我在我的视图表中显示此表并使用 mvc 实体框架。是否可以通过 sql 查询执行此操作,或者通过编码执行此操作更合适。请建议实现它的最佳方法。

我用来实现它的查询如下:

select [District_Name] as DISTRICT_NAME,
  [Training_Type],
  sum(Male_Participants) as Male_Participants,
  sum([Female_Participants]) as Female_Participants,
  sum([Total_Participants]) as Total_Participants
   from [TrainingsData]
     where 
    [Training_Type] = 'CMST'
    or 
    [Training_Type] = 'LMST' 
    or 
    [Training_Type] = 'Community Awareness Training  (CAT)' 
        or 
    [Training_Type] = 'Exposure Visit' 
        or 
    [Training_Type] = 'Literacy & Numeracy' 
        or 
    [Training_Type] = 'Orientation Training Workshop (OTW)'
        or 
    [Training_Type] = 'TVET'
  group by [District_Name],[Training_Type]

【问题讨论】:

  • 您可能只想使用SELECT training_type, SUM(male_paticipants) as males, SUM(female_participants) as females, SUM(male_participants)+SUM(female_participants) as total FROM _tbl GROUP BY training_type
  • 您可以使用GROUPING SETS 在 T-SQL 中获取总计和小计。因此,在您的情况下,您可能会使用 GROUP BY GROUPING SETS ((DISTRICT_NAME, TrainingType), (TrainingType)) 而不是 GROUP BY DISTRICT_NAME, TrainingType
  • 我想以第二个表格的形式输出。即显示每种培训类型的小计。我不想要总和。

标签: sql sql-server asp.net-mvc entity-framework


【解决方案1】:

您可以使用以下脚本实现所需的输出,但需要对报告进行一些调整,例如替换报告部分中的 District_name 和 Training_type。条件是 - 如果 District_Name = 'ZZZZZ' 然后在显示之前将 District_name、training_type 替换为 ''。

WITH Tab1(district_name,training_type,male_participants,female_participants,total_participants)
AS
(
    SELECT 'Jhal MAgsi','CMST',10,20,30 UNION ALL
    SELECT 'Khuzdar','CMST',5,5,10 UNION ALL
    SELECT 'Killa Abdullah','CMST',15,15,30 UNION ALL
    SELECT 'Jhal MAgsi','CAT',1,2,3 UNION ALL
    SELECT 'Khuzdar','CAT',14,20,34 UNION ALL
    SELECT 'Loralai','CAT',100,250,350 UNION ALL
    SELECT 'Pishin','CAT',1,1,2 UNION ALL
    SELECT 'Jhal MAgsi','LN',3,3,6 UNION ALL
    SELECT 'Khuzdar','LN',9,100,109 UNION ALL
    SELECT 'Loralai','LN',200,50,250 UNION ALL
    SELECT 'Jhal MAgsi','LMST',5,8,13 UNION ALL
    SELECT 'Khuzdar','LMST',9,5,14
)

SELECT district_name,training_type,male_participants,female_participants,total_participants
FROM Tab1 T1

UNION ALL

SELECT 'ZZZZZ' district_name,
training_type,
SUM(T1.male_participants) male_participants,
SUM(T1.female_participants) female_participants,
SUM(T1.total_participants) total_participants
FROM tab1 T1
GROUP BY training_type
ORDER BY 2,1

输出是-

district_name   training_type   male_participants   female_participants total_participants
Jhal MAgsi      CAT     1       2       3
Khuzdar         CAT     14      20      34
Loralai         CAT     100     250     350
Pishin          CAT     1       1       2
ZZZZZ           CAT     116     273     389
Jhal MAgsi      CMST    10      20      30
Khuzdar         CMST    5       5       10
Killa Abdullah  CMST    15      15      30
ZZZZZ           CMST    30      40      70
Jhal MAgsi      LMST    5       8       13
Khuzdar         LMST    9       5       14
ZZZZZ           LMST    14      13      27
Jhal MAgsi      LN      3       3       6
Khuzdar         LN      9       100     109
Loralai         LN      200     50      250
ZZZZZ           LN      212     153     365

【讨论】:

  • 它给出的结果与我的查询相同。
  • 每组后面会有一行,其中包含该组的总和。我已经检查并找到了here。
  • 检查调整后的代码。我已在您的脚本及其返回的预期结果中添加了值。您只需将“ZZZZZ”行视为上述详细信息的组级别详细信息。
  • 是的,它正在工作,我必须对其进行一些修改以获得所需的结果。谢谢
  • 不客气。请不要忘记投赞成票并接受结果:)
猜你喜欢
  • 1970-01-01
  • 2016-01-03
  • 2019-11-26
  • 1970-01-01
  • 2012-12-02
  • 1970-01-01
  • 2014-01-01
  • 1970-01-01
  • 2016-08-14
相关资源
最近更新 更多