当前位置: 代码迷 >> Sql Server >> 怎么把字段为每天日期转换成某年某月
  详细解决方案

怎么把字段为每天日期转换成某年某月

热度:59   发布时间:2016-04-24 18:25:45.0
如何把字段为每天日期转换成某年某月
假设我有一张表: 
region     CustomerName   MonthlyTotal        recordDate

Jiangsu         Restaurant          1220.00             2014-01-14
Jiangsu         Restaurant          150.00                     2014-01-19
Shanghai         Hotel                 2000.00          2012-10-11
Shanghai         Hotel                 200.00           2012-10-12
Shanghai         Hotel                 200.00              2012-11-12

我想查询出来的结果变成:
region     CustomerName   2014年一月      2012-10年十月         2012-10年十一月
Jiangsu    Restaurant                1370.00           null                          null
Shanghai         Hotel              null             2200.00                   200.00                 
我了解到pivot有透视功能。但我现在遇到的难题是何将recordDate里的一个月里的每一天时间记录最后转换成
某年某月并显示
------解决方案--------------------

WITH a1 (region,CustomerName,MonthlyTotal,recordDate) AS
(
SELECT 'Jiangsu','Restaurant',1220.00,'2014-01-14' UNION ALL
SELECT 'Jiangsu','Restaurant',150.00,'2014-01-19' UNION ALL
SELECT 'Shanghai','Hotel',2000.00,'2012-10-11' UNION ALL
SELECT 'Shanghai','Hotel',200.00,'2012-10-12' UNION ALL
SELECT 'Shanghai','Hotel',200.00,'2012-11-12'
)
,a2 AS
(
SELECT region,CustomerName,MonthlyTotal,CONVERT(char(7),recordDate,120) recordDate FROM a1
)
SELECT *
FROM a2 a
PIVOT (SUM(MonthlyTotal) FOR recordDate IN ([2014-01],[2012-10],[2012-11])) b
ORDER BY 1

------解决方案--------------------
有点忙,没空帮你改,这是例子,你调整一下吧
 
if not object_id('Class') is null
    drop table Class
Go
Create table Class([Student] nvarchar(2),[Course] nvarchar(2),[Score] int)
Insert Class
select N'张三',N'语文',78 union all
select N'张三',N'数学',87 union all
select N'张三',N'英语',82 union all
select N'张三',N'物理',90 union all
select N'李四',N'语文',65 union all
select N'李四',N'数学',77 union all
select N'李四',N'英语',65 union all
select N'李四',N'物理',85 
Go
 
declare @s nvarchar(4000)
Select     @s=isnull(@s+',','')+quotename([Course]) from Class group by[Course]
exec('select * from Class pivot (max([Score]) for [Course] in('+@s+'))b')
 
生成静态:
select * 
from 
    Class 
pivot 
    (max([Score]) for [Course] in([数学],[物理],[英语],[语文]))b
 
生成格式:
/*
Student 数学          物理          英语          语文
------- ----------- ----------- ----------- -----------
李四      77          85          65          65
张三      87          90          82          78
 
(2 行受影响)
*/
  相关解决方案