在oracle

时间:2018-04-20 07:19:22

标签: sql oracle

我有这样的数据

Q_NAME  VALUE

    Q1_2018   100
    Q2_2018   200
    Q4_2017   300
    Q3_2017   150

我想添加如 Q2_2018 + Q1_2018,Q2_2018 + Q4_2017 ,我该如何执行此添加

我想要的预期结果就像

Q_NAME          VALUE
Q1_2018+Q2_2018 300
Q2_2018_Q4_2017 500

2 个答案:

答案 0 :(得分:1)

使用PIVOT逻辑:

with t as ( select q_name, value from mytable )
select Q2_2018 + Q1_2018, Q2_2018 + Q4_2017 from t
pivot 
(
  max(value) for q_name in 
  ('Q1_2018' as Q1_2018,'Q2_2018' as Q2_2018, 'Q3_2017' as Q3_2017, 'Q4_2017' as Q4_2017)
);

Q2_2018+Q1_2018 Q2_2018+Q4_2017
--------------- ---------------
      300              500

SQL Fiddle Demo

答案 1 :(得分:1)

请注意我正在回答这篇文章标题中的问题:

  

在oracle中执行像Row1 + Row2,Row2 + Row3这样的添加

您可以将分析函数用于此类事情。 LEAD函数可用于从数据集下方的行中选取数据。在这个例子中,它查看下一行(按季度排序):

WITH
 example_data (quarter, amount) AS
   (SELECT 'q1',1000 FROM dual UNION ALL
    SELECT 'q2',2000 FROM dual UNION ALL
    SELECT 'q3',3000 FROM dual UNION ALL
    SELECT 'q4',4000 FROM dual 
   )
SELECT
 quarter
,amount
,LEAD(amount) OVER (ORDER BY quarter)             next_quarter
,amount + (LEAD(amount) OVER (ORDER BY quarter))  two_quarter_total
FROM
 example_data
;
    quarter amount  next_quarter   two_quarter_total
    q1      1000    2000           3000    
    q2      2000    3000           5000    
    q3      3000    4000           7000    
    q4      4000

最后一行没有'next'行,因此返回NULL