没关系..我使用的是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:结束主题
答案 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