我需要创建一个动态交叉表查询,其中列的数量并不总是固定的,因此不能使用 case when 进行硬编码。我用谷歌搜索,它确实找到了一个关于在 SQL Server 中做同样事情的博客,但我想知道是否有任何这样的文章博客关于在 Oracle 中做同样的事情。没有在 SQL Server 中工作过。Fol 是关于我的问题的信息。
我写的硬编码交叉表查询
SELECT
LU_CITY.CITY_NAME as "City",
count(CASE WHEN emp.emp_category='Admin' THEN emp.emp_id END) As "Admins",
count(CASE WHEN emp.emp_category='Executive' THEN emp.emp_id END) As "Executive",
count(CASE WHEN emp.emp_category='Staff' THEN emp.emp_id END) As "Staff",
count(emp.emp_id) As "Total"
FROM emp, LU_CITY
where
LU_CITY.CITY_ID = EMP.CITY_ID(+)
group by
LU_CITY.CITY_NAME, LU_CITY.CITY_ID
order by
LU_CITY.CITY_ID
表
emp (emp_id, emp_name, city_id, emp_category)
lu_city(city_id,city_name)
查询结果
------------------------------------------
City | Admins | Executive | Staff . . . .
------------------------------------------
A | 1 | 2 | 3
B | 0 | 0 | 4
. | . | . | .
.
.
emp_category 可以由用户根据需要添加。查询应该是这样的,它应该动态生成所有这些类别。
在这方面的任何指导将不胜感激。
提前致谢