【发布时间】:2017-12-12 11:31:36
【问题描述】:
我在 oracle 数据库中有两个带有以下示例记录的表
1.员工
inst_name name sid
ABC John 1
PQR Sam 2
ABC Tom 3
ABC Amit 4
PQR Jack 5
2。员工账户
sid account_no
1 4587
1 4588
2 4589
3 4581
3 4582
5 4583
5 4585
4 4586
我想要这样的结果
inst_name account_type total
PQR SINGLE 1
ABC SINGLE 1
PQR DOUBLE 1
ABC DOUBLE 2
这可以通过外部查询来实现,但是我想写一个没有外部查询的查询。想要在一个查询中完成。
SELECT
A .inst_name,
(
CASE COUNT (b.ac_no)
WHEN 1 THEN
'Single'
WHEN 2 THEN
'Double'
END
) account_type,
COUNT (A . NAME)
FROM
staffs A,
staffaccounts b
WHERE
A . s_id = b.s_id
GROUP BY
A .inst_name
上面的查询给出了错误ORA-00907: missing right parenthesis。可以在单个查询中完成还是外部查询是唯一的出路。
Oracle Version is 10g
【问题讨论】:
-
案例表达式,不是陈述。 (它返回一个值。)
-
对于
PQR怎么总是1。应该是2。不是吗? -
@XING
PQR只有一名员工Sam,staffaccounts表中有单个帐户。所以PQR在单账户类型中有 1 个,在双账户类型中有 1 个 -
我认为在预期结果中应该再列出一个
ABCDouble Double Single。 -
@Susang no as
PQR有 1 名员工单账户和 1 名双账户,ABC有 2 名双账户员工和 1 名单账户员工。共有5名员工(1(PQR-S)+1(ABC-S)+1(PQR-D)+2(ABC-D))。
标签: sql oracle count aggregate-functions case-when