【问题标题】:How to convert a single column containing multiple rows into rows如何将包含多行的单列转换为行
【发布时间】:2019-10-11 04:41:20
【问题描述】:

我有一个列,名称为 Student_name,其值可以说是 A、B、C、D、E、F 等等。

现在我必须将此列转换为具有每个别名的行。

select A.counts from (
select count(b.ATTND_FLAG) as counts , b.ATTND_FLAG as ATTND_FLAG
from hr_emp_notifications a, v_emp_attendance b
where a.emp_id=b.emp_id
and a.emp_id=90327
and b.ATTND_FLAG is not null
group by b.ATTND_FLAG )A

我的查询显示一列在行中有多个值。 我必须将这些值转换为行。

【问题讨论】:

  • 样本数据和预期输出对您的问题很有帮助。

标签: sql oracle pivot


【解决方案1】:

我会使用条件聚合:

select sum(case when ea.attnd_flag = 'A' then 1 else 0 end) as num_a,
       sum(case when ea.attnd_flag = 'B' then 1 else 0 end) as num_b,
       sum(case when ea.attnd_flag = 'C' then 1 else 0 end) as num_c,
       sum(case when ea.attnd_flag = 'D' then 1 else 0 end) as num_d,
       sum(case when ea.attnd_flag = 'E' then 1 else 0 end) as num_e,
       sum(case when ea.attnd_flag = 'F' then 1 else 0 end) as num_f
from v_emp_attendance ea
where ea.emp_id = 90327;

如果您需要多个员工,请使用group byea.emp_id`。

请注意,不需要join

【讨论】:

    【解决方案2】:

    看来你需要一个枢纽子句 -

    SELECT *
    FROM (SELECT NAME, ATTND_FLAG
          FROM v_emp_attendance)
    PIVOT (COUNT(ATTND_FLAG)
           FOR NAME IN ('A' AS A, 'B' AS B, 'C' AS C /* AND SO ON */)
          )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-07
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      相关资源
      最近更新 更多