【问题标题】:Oracle pivot function with two columns [duplicate]具有两列的 Oracle 数据透视函数 [重复]
【发布时间】:2014-02-08 02:14:44
【问题描述】:

如何在oracle中显示每个部门的员工人数和每个薪水

类似的东西

department_id salar_equal_1000 salar_equal_20000 city_boston city_detroit city_none 10 2 3 2 1 2 20 1 2 1 2 0

表格包含这样的数据

department_id 工资城市 10 1000 波士顿 10 1000 波士顿 10 2000 底特律 10 2000 10 2000 20 1000 波士顿 20 2000 底特律 20 2000 底特律

我想我必须使用 pivot 语句,但我不确定是否需要一些帮助

【问题讨论】:

  • 太棒了。你有什么问题?您使用什么数据?
  • 我用输入数据更新了问题
  • 也许,“pivot”和/或“dynamic pivot”是您要搜索的字词。
  • @jbaliuka 您发布的链接谈到了当数据透视函数中只有一列时......现在我有两列
  • @AndriyM 我正在​​搜索具有两列的枢轴函数..谢谢

标签: sql oracle


【解决方案1】:

试试这个:

select
    department_id, 
    sum(case when salary = 1000 then 1 else 0 end) as salar_equal_1000,
    sum(case when salary = 2000 then 1 else 0 end) as salar_equal_2000,
    sum(case when city   = 'boston' then 1 else 0 end) as city_boston,
    sum(case when city   = 'detroit' then 1 else 0 end) as city_detroit,
    sum(case when city   is null then 1 else 0 end) as city_none
from
    employees
group by department_id
order by department_id

再次编辑:

在 fiddle 上看到它:http://sqlfiddle.com/#!4/3564c/6

【讨论】:

  • @javanoob 这能解决你的问题吗?
  • 嗨,这很有用,但如果还有一列例如城市,请告诉我,我们需要每个城市的员工人数。非常感谢您的回答
  • 城市在您的问题中输入的位置?为了解决您需要的问题,您必须在您的桌子上拥有城市的任何链接或数据。仅使用 department_id 和薪水是不可能的。
  • 我要修改源数据..你否决了这个问题:)
  • 我正在查看 oracle 11g 中的数据透视函数,但我很困惑如何在其中输入两列..只有薪水列我能够做到..但是我如何输入城市列..??
【解决方案2】:
Hi please go through the following example, Might be it will help you. 

如果您使用的是 oracle10g,这是格式, 如果有 11g 枢轴功能

WITH cte(dept_id,salary) AS (SELECT 10,1000 FROM dual
                                      UNION ALL
SELECT 10,1000 FROM dual
UNION ALL
                             SELECT 10,1000 FROM dual
                             UNION ALL
                             SELECT 20,1000 FROM dual
                             UNION ALL
                             SELECT 10,2000 FROM dual
                             UNION ALL
                             SELECT 10,2000 FROM dual
                             UNION ALL
                             SELECT 20,1000 FROM dual
                             UNION ALL
                             SELECT 20,2000 FROM dual
                             UNION ALL
                             SELECT 20,2000 FROM dual
                            ),


TEMP as(SELECT
    dept_id,
     count(salary) cnt,salary
FROM
    cte
GROUP BY salary, dept_id)

SELECT dept_id,sum(CASE WHEN salary=1000 THEN cnt ELSE 0 END)salary_1000,
sum(CASE WHEN salary=2000 THEN cnt ELSE 0 END) salary_2000 FROM TEMP
GROUP BY dept_id

【讨论】:

  • 你能告诉我如何将城市也添加到查询中吗,我修改了我的问题
猜你喜欢
  • 1970-01-01
  • 2018-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2020-01-05
  • 1970-01-01
  • 2016-06-18
相关资源
最近更新 更多