水平输出sql数据

时间:2016-02-16 21:52:06

标签: sql oracle pivot

没关系..我使用的是Oracle 10g,这意味着新的Oracle版本或其他SQL版本的简单连接功能都不起作用。

我正在浏览一个列(process_date)中有重复项的表(工资单)。 DB是Oracle DB。

例如表薪资:

Yr  |  Week |  Process_date
15     53       12/19/2015
15     52       12/19/2015
15     51       12/7/2015

我希望输出返回具有相同处理日期的周数与同一行上的周数一样

Yr  |  Week 1|  Week 2 | Process_date
15     53       52        12/19/2015

我尝试了各种子选择和连接,但无法正确使用。

编辑:添加细节 EDIT2:结束主题

1 个答案:

答案 0 :(得分:1)

SELECT Yr, GROUP_CONCAT(Week SEPARATOR ',') Weeks, Process_date
FROM payroll 
GROUP BY Yr, Process_date;

这将为您提供以下输出:

Yr | Weeks | Process_date
15   53,52   12/19/2015

如果必须在单独的列中获取它们,则可能需要子查询,如下所示。如果您只有一周而不是两周,则此查询将无法正常运行。

SELECT Yr, SUBSTRING_INDEX(SUBSTRING_INDEX(Weeks, ',', 1), ',', -1) Week1,
    SUBSTRING_INDEX(SUBSTRING_INDEX(Weeks, ',', 2), ',', -1) Week2, Process_date
FROM
    (SELECT Yr, GROUP_CONCAT(Week SEPARATOR ',') Weeks, Process_date
    FROM payroll 
    GROUP BY Yr, Process_date) merged_payroll;

输出:

Yr | Weeks | Process_date
15   53,52   12/19/2015
15   51,51   12/7/2015  (DUPLICATED 51)

参考:(1)How to use GROUP_CONCAT in a CONCAT in MySQL(2)Split value from one field to two