with as用法及行转列的用法

用with as 建立临时表(产品使用记录),想要达到什么目的?统计产品每日使用情况

with  productD as(
     select to_date(‘2015-1-1‘,‘yyyy-MM-dd‘) as dt,‘A01‘ as productNo,‘10‘ as pNum from dual
     union all
      select to_date(‘2015-1-1‘,‘yyyy-MM-dd‘) as dt,‘A02‘ as productNo,‘10‘ as pNum from dual
     union all
     select to_date(‘2015-1-2‘,‘yyyy-MM-dd‘) as dt,‘A01‘ as productNo,‘10‘ as pNum from dual
     union all
     select to_date(‘2015-1-2‘,‘yyyy-MM-dd‘) as dt,‘A01‘ as productNo,‘24‘ as pNum from dual
     union all
     select to_date(‘2015-1-3‘,‘yyyy-MM-dd‘) as dt,‘A01‘ as productNo,‘25‘ as pNum from dual
     union all
     select to_date(‘2015-1-4‘,‘yyyy-MM-dd‘) as dt,‘A01‘ as productNo,‘25‘ as pNum from dual
     union all
     select to_date(‘2015-1-5‘,‘yyyy-MM-dd‘) as dt,‘A01‘ as productNo,‘26‘ as pNum from dual
     union all
      select to_date(‘2015-1-5‘,‘yyyy-MM-dd‘) as dt,‘A01‘ as productNo,‘27‘ as pNum from dual
     union all
      select to_date(‘2015-1-5‘,‘yyyy-MM-dd‘) as dt,‘A01‘ as productNo,‘20‘ as pNum from dual
     union all
     select to_date(‘2015-1-6‘,‘yyyy-MM-dd‘) as dt,‘A01‘ as productNo,‘20‘ as pNum from dual
     union all
     select to_date(‘2015-1-6‘,‘yyyy-MM-dd‘) as dt,‘A02‘ as productNo,‘20‘ as pNum from dual
)
select  d.productNo,nvl(sum(case to_char(d.dt,‘yyyyMMdd‘) when ‘20150101‘ then pnum end ),0) as d1 ,
nvl(sum(case to_char(d.dt,‘yyyyMMdd‘) when ‘20150102‘ then pnum end ),0) as d2,
nvl(sum(case to_char(d.dt,‘yyyyMMdd‘) when ‘20150103‘ then pnum end ),0) as  d3,
nvl(sum(case to_char(d.dt,‘yyyyMMdd‘) when ‘20150104‘ then pnum end ),0) as  d4,
nvl(sum(case to_char(d.dt,‘yyyyMMdd‘) when ‘20150105‘ then pnum end ),0) as  d5,
nvl(sum(case to_char(d.dt,‘yyyyMMdd‘) when ‘20150106‘ then pnum end ),0) as  d6
from productD d
group by d.productNo
--order by d.productNo desc

;

效果图如下:

不求一步登天,只希望自己偶尔能学习,解决自己遇到的问题;

时间: 2024-10-13 04:04:56

with as用法及行转列的用法的相关文章

行转列PIVOT用法

新建StudentScore表: CREATE TABLE [dbo].[StudentScore]( [ID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY, [StudentCard] [varchar](50) NOT NULL, [StudentName] [nvarchar](5) NOT NULL, [Type] [nvarchar](10) NOT NULL, [Course] [nvarchar](10) NOT NULL, [Score] [

sql pivot(行转列) 和unpivot(列转行)的用法

1.PIVOT用法(行转列) select * from Table_Score as a pivot (sum(score) for a.name in ([语文],[数学],[外语],[文综],[理综])) as b 数据: id name score 1 语文 100 2 数学 95 3 外语 100 4 文综 250 5 理综 300 结果: id 语文 数学 外语 文综 理综 1 100 NULL NULL NULL NULL 2 NULL 95 NULL NULL NULL 3 NU

行转列:SQL SERVER PIVOT与用法解释

转自:http://www.cnblogs.com/lwhkdash/archive/2012/06/26/2562979.html 在数据库操作中,有些时候我们遇到需要实现“行转列”的需求,例如一下的表为某店铺的一周收入情况表: WEEK_INCOME(WEEK VARCHAR(10),INCOME DECIMAL) 我们先插入一些模拟数据: INSERT INTO WEEK_INCOME SELECT '星期一',1000 UNION ALL SELECT '星期二',2000 UNION

delphi CXGRID用法 (取行、列值;定位选中某行等等)

CXGRID用法 (取行.列值:定位选中某行等等) Delphi Cxgrid获取选中行列,排序规则,当前正在编辑的单元格内的值 cxGrid1DBTableView1.Controller.FocusedRowIndex 当前行号 cxGrid1DBTableView1.Controller.FocusedRow 当前行 cxGrid1DBTableView1.Controller.FocusedColumn 当前列 cxGrid1DBTableView1.Controller.Focused

sql与oracle中有关case和decode的用法(行转列)及比较(转

引: 为了举例说明,这里创建了一张成绩表,如下图所示: 比较: 1.sql中,这两个函数我们仅能使用case,代码及结果如下: select name,       case Subject          when '语文' then 1          when '数学' then 2          when '英语' then 3   --else 3       end  as '科目代码'   from Results 同样的,我们可以用case实现行转列,代码及结果如下: s

Pivot 行转列用法

源视图: 使用 Pivot 行转列进行处理: 语句如下: select m.*,a.A as AccountA,a.B as AccountB,a.C as AccountC,a.D as AccountD,a.E as AccountE,a.F as AccountF,a.G as AccountG from     (select TypeCode,Account,MainCode from Sale_AdvanceType) p     pivot    (        max(Acco

Oracle行转列、列转行的Sql语句总结(转)

多行转字符串 这个比较简单,用||或concat函数可以实现 select concat(id,username) str from app_userselect id||username str from app_user 字符串转多列 实际上就是拆分字符串的问题,可以使用 substr.instr.regexp_substr函数方式 字符串转多行 使用union all函数等方式 wm_concat函数 首先让我们来看看这个神奇的函数wm_concat(列名),该函数可以把列值以",&quo

mysql行转列利用case when

CREATE TABLE bill ( id CHAR(36) NOT NULL, customer INT(255) NULL DEFAULT NULL COMMENT '顾客', shop INT(255) NULL DEFAULT NULL COMMENT '消费店铺', money DECIMAL(10,2) NULL DEFAULT NULL COMMENT '花费', type INT(255) NULL DEFAULT NULL COMMENT '类型 0', PRIMARY KE

oracle行转列

针对oracle数据查询的数据,行转列 1.wm_concat函数: 例一: select c1,c2,wm_concat(c3) from T where.... group by c1,c2 查询结果自动用","分割 例二: select c1,c2,wm_concat(c3)over(partition by ..order by..) from T where.... 其中,partition用来分组, order用来排序 2.sys_connect_by_path函数: 这个