我要求我必须以下列格式返回数据:
Batch Id Element1 Element2 Element3 .. Element n Date ------------------------------------------------------------ 1 0.25 1.5 3.5 2.2 1/12/2014 2 1.3 2.3 5.5 1.1 5/12/2014 3 4.5 5.5 4.3 6.3 7/12/2014 .. .. .. .. .. .. n 1.5 2.3 5.5 9.3 12/12/2014 ----------------------------------------------------------------
我有两个表,其中数据以下列格式存储: 表1:
Batch Id CreatedBy Date ----------------------------------------------- 1 ABC 1/12/2014 2 PQR 5/12/2014 3 XYZ 7/12/2014 .. .. .. n YYY 12/12/2014 ----------------------------------------------
表2:
Batch Id Element Value ----------------------------------------------- 1 Element1 0.25 1 Element2 1.5 1 Element3 3.5 .. .. .. 1 Elementn 2.2 2 Element1 1.3 2 Element2 2.3 2 Element3 5.5 .. .. .. 2 Elementn 6.3 . . . . . . . . . n Element1 1.5 n Element2 2.3 n Element3 5.5 .. .. .. n Elementn 9.3 ----------------------------------------------
我的问题是如何在表2中转置记录[即元素及其价值]以所需格式显示我的结果?请注意,每个批次中的元素数量不相同。但我有可以出现的最大元素列表。
任何建议都将不胜感激。
谢谢! 最好的祝福, 库纳尔
答案 0 :(得分:1)
使用透视操作解决方法
构造一个查询,其中表与必要的列连接(假设内连接):batch_id,batch_date,element,value
假设每批一个元素值(因此求和是一个有效的函数)。关键是这需要是一个聚合函数。
使用此处的语法Oracle 11g Pivoting Operations添加pivot子句。
使用pivot子句的for部分,您可以对聚合进行分段/创建新元素列。
SELECT batch_id,
element1,
element2,
--assume finite list
elementn,
batch_date
FROM
(SELECT batch.batch_id,
batch.DATE batch_date,
batch_element.element b_element,
batch_element.value b_value
FROM table1 batch
JOIN table2 batch_element
ON batch.batch_id = batch_element.batch_id
--assume want to see only batches with elements
) pivot (sum(b_value) FOR b_element IN (('Element1') AS element1, ('Element2') AS element2, ('Element3') AS element3, ('Element4') AS element4, ...
--assume finite list as indicated
('ElementN') AS elementn ));
以下是使用示例scott模式的示例,其中平均工资按作业计算:
SCOTT@dev> SELECT job,
2 accounting,
3 research,
4 sales
5 FROM
6 (SELECT d.dname,
7 e.job,
8 e.sal
9 FROM dept d
10 LEFT JOIN emp e
11 ON d.deptno = e.deptno
12 ) pivot (avg(sal) FOR dname IN ('ACCOUNTING' AS accounting, 'RESEARCH' AS research, 'SALES' AS sales))
13 /
JOB ACCOUNTING RESEARCH SALES
========= ========== ========== ==========
CLERK 1300 950 950
SALESMAN 1400
PRESIDENT 5000
MANAGER 2450 2975 2850
ANALYST 3000
6 rows selected.