2014-04-04 98 views
1

我使用Oracle 11g, PLSQL版本10.0.1集團通過數值

我取了Product_Status每日報告。一旦原始數據到來。我根據原始數據製作數據透視表,並按MS Excel中按日期列的產品銷售進行分組。我想在查詢本身做同樣的事情。

產品銷售日期格式:2014年3月12日上午7點57分27秒
Tbl_Name:tv_productdetails

普通的SQL查詢

下面是詳細的產品樣本查詢:

Select product.id, Product_Sales_Date 
from smspadm.tv_productdetails 
where 
Product_Sales_Date >= TO_DATE('01-april-2014','DD-MON-YYYY') 
and Product_Sales_Date < TO_DATE('04-april-2014','DD-MON-YYYY') 
and product_status in('active') 

預期產出將爲:

product.id 1-Apr 2-Apr 3-Apr 4-Apr Grandtotal 

A011   89  89 89 89 356 
B055   85  85 85 85 340 
C055   78  78 78 78 312 
D011   98  98 98 98 392 
E897   45  45 45 45 180 

我只需要兩列Product.id,Product_Sales_Date按銷售日期對數據進行分組。 下面是樣本數據:

Product.id Product_Sales_Date 

A001 4/12/2014 3:38:00 PM 
A002 4/13/2014 3:38:00 PM 
A003 4/14/2014 11:34:34 AM 
A004 4/15/2014 12:56:52 PM 
A001 4/16/2014 10:54:58 AM 
A002 4/17/2014 9:01:19 AM 
A003 4/18/2014 12:56:52 PM 
A004 4/19/2014 3:38:00 PM 
A005 4/20/2014 1:07:49 PM 
A006 4/21/2014 3:02:14 PM 
A004 4/22/2014 10:55:54 AM 
A005 4/23/2014 3:16:28 PM 
A006 4/24/2014 8:46:48 AM 
A007 4/25/2014 3:53:32 PM 
A008 4/26/2014 7:57:27 AM 
+0

根據您所描述的,您可以使用PIVOT。請提供一些示例數據,以便我們可以處理它。 – Avrajit

+0

更新示例數據.. – user3497327

+0

您需要使用Dynamic PIVOT。 – AK47

回答

-1

我從來沒有工作過的10g中,還共享SQL Server上準備了一些邏輯,

Declare @cols varchar(max) = '' 
Declare @query varchar(max) = '' 

select @cols = STUFF((SELECT distinct ',Case When Datediff(dd,sDate,' + 
         QUOTENAME(Cast(sDate as Date),'''') + ') = 0 then 1 else 0 end as ' + QUOTENAME(Cast(sDate as Date),'') val 
         FROM tv_productdetails 
         ORDER BY val asc 
         FOR XML PATH(''), TYPE 
        ).value('.', 'NVARCHAR(MAX)') 
         , 1, 1, '') 
Select @cols       

SELECT @query = 'select productid, ' + @cols +' from tv_productdetails ' 

execute(@query) 

希望它可以幫助你。進一步的輸出可以分組在一起,以實現你所要求的,不知道我用過的所有東西在10g中是否存在。

+0

問題未解決..任何進一步的反應將高度讚賞 – user3497327