现在有一个表:
成绩表
t_result:
a_no a_type a_subject a_flag
001 0000 A 1
001 0000 B 1
001 0001 A 1
001 0001 C 0
002 0000 C 1
002 0000 E 0
002 0000 F 1
002 0001 A 1
002 0001 B 0
002 0001 C 1
有自己的编号(a_no),还有一个类型编号(a_type), 这两个字段作为表的主键。
可以选不同可的科目,且科目的数量及个数都可以不同。后面是标识当前科目是否通过。
现在想做一个统计语句,求出的结果类似于查出来按照主键进行分组。
查询的结果实例为:
a_no a_type 全部通过
001 0000 Y
001 0001 N
002 0000 N
002 0001 N
SQL代码如下:
- SELECT
- TMP_TABLE.A_NO,
- TMP_TABLE.A_TYPE,
- CASE WHEN ASUM = CSUM THEN 'Y' ELSE 'N' END AS 全部通过
- FROM
- (
- SELECT T.A_NO,
- T.A_TYPE,
- T.A_FLAG,
- SUM(T.A_FLAG) OVER(PARTITION BY T.A_NO, T.A_TYPE ORDER BY T.A_NO) AS ASUM,
- COUNT(T.A_FLAG) OVER(PARTITION BY T.A_NO, T.A_TYPE ORDER BY T.A_NO) AS CSUM,
- ROW_NUMBER() OVER(PARTITION BY T.A_NO, T.A_TYPE ORDER BY T.A_NO ) AS RN
- FROM T_RESULT T
- )TMP_TABLE
- WHERE
- TMP_TABLE.RN = 1
简练版本
- SELECT A_NO,
- A_TYPE,
- CASE
- WHEN COUNT(DECODE(A_FLAG, 0, 1)) > 0 THEN 'N'
- ELSE 'Y'
- END "全部通过"
- FROM T_RESULT
- GROUP BY A_NO, A_TYPE