我使用的是Oracle 11g, Plsql版本10.0.1
我获取了Product_Status的每日报告。一旦原始数据到来。我从原始数据中转出一个轴,并按产品销售按日期列在MS Excel中对其进行分组。我想在查询本身做同样的事情。
产品销售日期格式:3/12/2014 7:57:27 AM 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 :(得分:-1)
我从未使用过10g,仍然在SQL Server上共享一些LOGIC,
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中。