2012-10-11 19 views
0

我有一个需要迁移到Oracle 11g的MS Access PIVOT查询。将访问PIVOT查询转换为Oracle 11g

TRANSFORM Format(Sum(tblOrderLine.ItemQtyCur), '#0.0') AS [The Value] 

SELECT tblOrderLine.OrderStatus, tblOrderLine.OrdNo, tblOrderLine.OrdlNo, Format(Sum(tblOrderLine.ItemQtyCur), '#0.0') As SumConfQty 

FROM tblOrder INNER JOIN (tblOrderLine LEFT JOIN tblArticle ON tblOrderLine.ItemId = tblArticle.ArtNo) ON tblOrder.OrdNo = tblOrderLine.OrdNo 

GROUP BY tblOrderLine.OrderStatus, tblOrderLine.OrdNo, tblOrderLine.OrdlNo 

PIVOT tblOrderLine.LastDate 

我无法将其转换为oracle 11g PIVOT。

任何一个可以帮我这个....

编辑:

请问过b这样.....

WITH pivot_data AS (
SELECT tblOrderLine.OrderStatus, tblOrderLine.OrdNo, tblOrderLine.OrdlNo, Format(tblOrderLine.ItemQtyCur, '#0.0') As SumConfQty 
FROM tblOrder INNER JOIN (tblOrderLine LEFT JOIN tblArticle ON tblOrderLine.ItemId = tblArticle.ArtNo) ON tblOrder.OrdNo = tblOrderLine.OrdNo 
GROUP BY tblOrderLine.OrderStatus, tblOrderLine.OrdNo, tblOrderLine.OrdlNo 
) 
SELECT * FROM pivot_data 
PIVOT XML (
Format(Sum(tblOrderLine.ItemQtyCur), '#0.0') 
FOR tblOrderLine.LastDate 
IN (
SELECT tblOrderLine.LastDate 
FROM tblOrder INNER JOIN (tblOrderLine LEFT JOIN tblArticle ON tblOrderLine.ItemId = tblArticle.ArtNo) ON tblOrder.OrdNo = tblOrderLine.OrdNo 
GROUP BY tblOrderLine.OrderStatus, tblOrderLine.OrdNo, tblOrderLine.OrdlNo 
) 
); 
+0

算不了什么,不知道如何将它 –

回答

1

PIVOT语法应该是这样的:

select * 
from 
(
    SELECT tblOrderLine.OrderStatus, 
     tblOrderLine.OrdNo, 
     tblOrderLine.OrdlNo, 
     tblOrderLine.ItemQtyCur, 
     tblOrderLine.LastDate 
    FROM tblOrder 
    INNER JOIN tblOrderLine 
     ON tblOrder.OrdNo = tblOrderLine.OrdNo 
    LEFT JOIN tblArticle 
     ON tblOrderLine.ItemId = tblArticle.ArtNo 
) x 
pivot 
(
    sum(ItemQtyCur) 
    for LastDate in (yourDatesHere) 
) p 

如果要使用PIVOT XML,则语法将类似于此:

select * 
from 
(
    SELECT tblOrderLine.OrderStatus, 
     tblOrderLine.OrdNo, 
     tblOrderLine.OrdlNo, 
     tblOrderLine.ItemQtyCur, 
     tblOrderLine.LastDate 
    FROM tblOrder 
    INNER JOIN tblOrderLine 
     ON tblOrder.OrdNo = tblOrderLine.OrdNo 
    LEFT JOIN tblArticle 
     ON tblOrderLine.ItemId = tblArticle.ArtNo 
) x 
pivot XML 
(
    sum(ItemQtyCur) as SumItemQtyCur 
    for (LastDate) in (SELECT DISTINCT LastDate FROM tblOrderLine) 
) p 

下面是有关甲骨文公司的支点参考文章:

pivot and unpivot queries in 11g

+1

@NikhilGupta转换,你可以创建一个[SQL小提琴] (http://sqlfiddle.com/#!4/d41d8)与每个表的一些示例数据? – Taryn