使用SQL Server 2008 Management Studio:
我目前正在创建以下交叉表查询,这是我到目前为止所做的。
CREATE TABLE #Months
(UserID int,
ModuleID int,
Passed bit,
Name nvarchar(255),
Company nvarchar(50),
LanguageID nvarchar(10),
CodeRegisteredWith nvarchar(50),
TotalLoggedInDuration int,
Region int,
IsAdmin bit,
IsRep bit,
IsRetailer bit,
IsTeamLeader bit,
dateregistered date,
total int,
usertotal int,
complete int,
January int, february int, march int, april int, may int, June int, July int,
August int, September int, October int, November int, December int)
SELECT
[1] January,
[2] February,
[3] March,
[4] April,
[5] May,
[6] June,
[7] July,
[8] August,
[9] September,
[10] October,
[11] November,
[12] December
FROM
(
SELECT DATEADD(MONTH,0,Convert(smalldatetime,[dateregistered],120))as months
FROM #Temp WITH(NOLOCK)
) d
pivot
(
SUM(complete)
for months in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])
) p
此查询旨在使用“已传递”数据填充12个新字段(月):
所以从理论上讲,你有12列一个记录,每个单元格将包含当月通过的用户数量的总和。
但我正在添加和测试,因为这是使用虚拟表的大规模存储过程的一部分。当我运行这个程序时,所有其他人都会工作,但这会失败并抱怨:
Msg 8114,Level 16,State 1,Procedure GRAPHMainQuery,Line 127
将数据类型nvarchar转换为smalldatetime时出错 消息473,级别16,状态1,过程GRAPHMainQuery,第127行
PIVOT运算符中提供了错误值“1”。
Nvarchar到smalldatetime?我已经把它作为日期存储在我的#table中,我甚至使用convert()我只是不明白为什么这会抱怨?
答案 0 :(得分:1)
使用
MONTH(Convert(datetime,[dateregistered],120)) as months
获取月份数(返回一个整数)。 DATEADD(...)返回datetime / smalldatetime值,该值无法与[1] ... [12]进行比较PIVOT语句中的月号列。