Sql 分组方式和多列计数和总和
我有一张学生成绩表Sql 分组方式和多列计数和总和,sql,ms-access,count,sum,Sql,Ms Access,Count,Sum,我有一张学生成绩表 AG T1 T2 T3 L0011001 A B A L0011002 A B B L0011003 A A C L0011004 A A C 我希望AG的输出如下所示: L0011001 2A 1B L0011002 1A 2B L00
AG T1 T2 T3
L0011001 A B A
L0011002 A B B
L0011003 A A C
L0011004 A A C
我希望AG的输出如下所示:
L0011001 2A 1B
L0011002 1A 2B
L0011003 2A 1C
L0011004 2A 1C
如何获取此信息?您的数据格式非常非常糟糕。每个“T”和每个学生应该有一行 然而,有时我们会遇到糟糕的数据格式。使用
iif()
,您可以做任何您想做的事情:
这并不是你想要的。它将值放在单独的列中——这种格式对我来说更有意义
对于您的特定格式:
select ag,
(iif(A_s > 0, A_s & "A ") &
iif(B_s > 0, B_s & "B ") &
iif(C_s > 0, C_s & "C ")
)
from (select ag,
(iif(t1 = 'A', 1, 0) + iif(t2 = 'A', 1, 0) + iif(t2 = 'A', 1, 0)) as A_s,
(iif(t1 = 'B', 1, 0) + iif(t2 = 'B', 1, 0) + iif(t2 = 'B', 1, 0)) as B_s,
(iif(t1 = 'C', 1, 0) + iif(t2 = 'C', 1, 0) + iif(t2 = 'C', 1, 0)) as C_s
from t
) as x
您的数据格式非常非常糟糕。每个“T”和每个学生应该有一行 然而,有时我们会遇到糟糕的数据格式。使用
iif()
,您可以做任何您想做的事情:
这并不是你想要的。它将值放在单独的列中——这种格式对我来说更有意义
对于您的特定格式:
select ag,
(iif(A_s > 0, A_s & "A ") &
iif(B_s > 0, B_s & "B ") &
iif(C_s > 0, C_s & "C ")
)
from (select ag,
(iif(t1 = 'A', 1, 0) + iif(t2 = 'A', 1, 0) + iif(t2 = 'A', 1, 0)) as A_s,
(iif(t1 = 'B', 1, 0) + iif(t2 = 'B', 1, 0) + iif(t2 = 'B', 1, 0)) as B_s,
(iif(t1 = 'C', 1, 0) + iif(t2 = 'C', 1, 0) + iif(t2 = 'C', 1, 0)) as C_s
from t
) as x
你可能想考虑一个联合查询和一个交叉表,输出并不完全符合你的意愿,但它确实是有意义的。
TRANSFORM Count(qry.ag) AS countofag
SELECT qry.ag
FROM (SELECT tbl.ag,
tbl.t1
FROM tbl
UNION ALL
SELECT tbl.ag,
tbl.t2
FROM tbl
UNION ALL
SELECT tbl.ag,
tbl.t3
FROM tbl) AS qry
GROUP BY qry.ag
PIVOT qry.t1;
你可能想考虑一个联合查询和一个交叉表,输出并不完全符合你的意愿,但它确实是有意义的。
TRANSFORM Count(qry.ag) AS countofag
SELECT qry.ag
FROM (SELECT tbl.ag,
tbl.t1
FROM tbl
UNION ALL
SELECT tbl.ag,
tbl.t2
FROM tbl
UNION ALL
SELECT tbl.ag,
tbl.t3
FROM tbl) AS qry
GROUP BY qry.ag
PIVOT qry.t1;
非常感谢,非常有帮助。回复很快。非常感谢,非常有帮助。反应很快。