【问题标题】:Need solution for CASE for the below result需要 CASE 的解决方案以获得以下结果
【发布时间】:2015-07-08 05:43:22
【问题描述】:

我有一张桌子说员工

Employee
Emp_ID Emp_ver_ID Emp_name
   1       1        A
   1       2        AB
   2       3        C
   2       4        CD



Sales_Emp
Emp_Ver_ID   Sales_ID 
   1             1      
   2             2
   3             3



Sales
Sales_ID  Sales_name  sales_value
    1          X          XX
    2          Y          YY
    3          Z          ZZ

现在我想要一个类似的结果

Emp_ID  X       Y       Z
    1   XX      YY      null
    2   null    null    ZZ

【问题讨论】:

  • 这不清楚你在问什么,也显示你到目前为止尝试过的内容
  • 希望这个例子应该清楚我想要什么样的结果
  • 到目前为止你尝试过什么?
  • 我使用了 case 语句,我得到了像 Emp_Id X Y Z 1 XX null null 1 null YY null 2 null null ZZ 这样的结果
  • 我不想要 EMP_ID = 1 的 2 行。结果应该显示在一行中..

标签: sql oracle oracle10g


【解决方案1】:

此查询使用pivot 运算符(可从 Oracle 11g 版本获得)为您的示例提供预期的输出:

SQLFiddle demo

select * 
  from (
    select emp_id, sales_name, sales_value 
      from employee e 
      left join sales_emp se using (emp_ver_id)
      left join sales using (sales_id))
pivot (max(sales_value) for sales_name in ('X' x, 'Y' y, 'Z' z))

...这是适用于 Oracle 10g 及更早版本的解决方案:

select 
    emp_id,
    max(case when sales_name = 'X' then sales_name end) x,
    max(case when sales_name = 'Y' then sales_name end) y,
    max(case when sales_name = 'Z' then sales_name end) z
  from (
    select emp_id, sales_name, sales_value
      from employee e
      left join sales_emp se using (emp_ver_id)
      left join sales using (sales_id))
  group by emp_id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    相关资源
    最近更新 更多