2014-04-04 99 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