当前位置: 代码迷 >> Oracle开发 >> Oracle 行转列 -> linq 实现,该怎么处理
  详细解决方案

Oracle 行转列 -> linq 实现,该怎么处理

热度:616   发布时间:2016-04-24 06:32:47.0
Oracle 行转列 --> linq 实现


现在我建的是测试表在sqlserver上建的,但是实际库是在oracle的,所以请大家用oracle语法先帮我想一想sql如何写,
然后如果可以的话,再帮帮忙,用linq实现一下 ,因为sql写完我还是要转成linq的,项目中要用linq实现表查询。谢谢

SELECT * FROM TB_FK
SELECT * FROM TB_REQ_HDR
SELECT * FROM TB_REQ_BKG

三张表关联查询

查询是TB_REQ_HDR作为头表,
然后左连接TB_REQ_BKG和TB_FK表,
TB_REQ_BKG表取得每个REQUEST_NO下的前6条数据(按照BKG_REV排序,要实现top和行转列)

想要的结果如下

REQUEST_NO ReqContent BKG_REV1 BKG_Content1 BKG_REV2 BKG_Content2 ... BKG_REV6 BKG_Content6 FKId FKName
1 1123 1 11 3 33   ...  7 77 FK1 FKName1
2 2234 1 88   ...                 FK2 FKName2
------解决思路----------------------
本帖最后由 bw555 于 2014-12-16 10:23:56 编辑
WITH T AS (
select  B.REQUEST_NO,B.ReqContent,C.BKG_REV,C.BKG_Content,B.FKId,A.FKName,
ROW_NUMBER()OVER(PARTITION BY B.REQUEST_NO ORDER BY ROWNUM) RN
from TB_FK A,TB_REQ_HDR B,TB_REQ_BKG C
WHERE A.FKId(+)=B.FKId AND B.REQUEST_NO=C.REQUEST_NO(+)
)
SELECT REQUEST_NO,MAX(ReqContent) ReqContent,
MAX(DECODE(RN,1,BKG_REV) BKG_REV1,
MAX(DECODE(RN,1,BKG_Content) BKG_Content1,
MAX(DECODE(RN,2,BKG_REV) BKG_REV2,
MAX(DECODE(RN,2,BKG_Content) BKG_Content2,
MAX(DECODE(RN,3,BKG_REV) BKG_REV3,
MAX(DECODE(RN,3,BKG_Content) BKG_Content3,
MAX(DECODE(RN,4,BKG_REV) BKG_REV4,
MAX(DECODE(RN,4,BKG_Content) BKG_Content4,
MAX(DECODE(RN,5,BKG_REV) BKG_REV5,
MAX(DECODE(RN,5,BKG_Content) BKG_Content5,
MAX(DECODE(RN,6,BKG_REV) BKG_REV6,
MAX(DECODE(RN,6,BKG_Content) BKG_Content6,
MAX(FKID) FKId,MAX(FKNAME) FKName
FROM T
GROUP BY REQUEST_NO
  相关解决方案