使用 SQL Server 2008 管理工作室:
我目前正在创建以下交叉表查询,这就是我目前所拥有的。
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 列一条记录,每个单元格将包含该月通过的用户数量的总和。
但我目前正在添加和测试,因为这是使用虚拟表的大型存储过程的一部分。当我运行此程序时,所有其他程序都可以工作,但这失败并抱怨:
消息 8114,级别 16,状态 1,过程 GRAPHMainQuery,第 127 行将
数据类型 nvarchar 转换为 smalldatetime 时出错。
消息 473,级别 16,状态 1,过程 GRAPHMainQuery,第 127 行
PIVOT 运算符中提供了不正确的值“1”。
Nvarchar 到 smalldatetime?我已经将它作为日期存储在我的#table 中,我什至在使用 convert() 我只是不明白为什么会抱怨?