【发布时间】:2018-06-14 17:47:52
【问题描述】:
尝试将以下逻辑转换为 SQL 查询时出现此错误
逻辑:
TRANSFORM First([SirName] & " - " & [SecondName]) AS Name
SELECT qry_Date.RoomNumber
FROM Guest RIGHT JOIN qry_Date ON Guest.ID = qry_Date.GuestID
WHERE (((qry_Date.RoomNumber) Is Not Null))
GROUP BY qry_Date.RoomNumber
PIVOT qry_Date.Date;
以下是我到目前为止所做的事情
DECLARE @cols AS NVARCHAR(MAX)
DECLARE @query AS VARCHAR(MAX)
SELECT @cols = STUFF((SELECT distinct top 100 percent
',' + QUOTENAME(convert(NVARCHAR(MAX),qry_Date.Date,103))
FROM qry_Date
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'),1,1,'');
SET @query = 'SELECT Name, ' + @cols + '
FROM
(SELECT [SirName] + '' - '' + [SecondName] AS Name
,qry_Date.RoomNumber
,qry_Date.Date
FROM Guest RIGHT JOIN qry_DateTemp ON Guest.ID = qry_Date.GuestID
WHERE qry_Date.RoomNumber Is Not Null) as t
PIVOT
(count(Name) FOR [Date] IN( ' + @cols + ')
) as p'
print @query
execute(@query)
哪个结果错误
消息 8114,级别 16,状态 1,行 9 转换数据类型时出错 nvarchar 到 datetime2。消息 473,第 16 层,状态 1,第 9 行 PIVOT 运算符中提供了不正确的值“13/12/2014”。消息 207, Level 16, State 1, Line 1 列名'Name'无效。
我的print @query 输出
SELECT Name, [01/12/2014],[02/12/2014],[03/12/2014],[04/12/2014],[05/12/2014],[06/12/2014],[07/12/2014],[08/12/2014],[09/12/2014],[10/12/2014],[11/12/2014],[12/12/2014],[13/12/2014],[14/12/2014],[15/12/2014],[16/12/2014],[17/12/2014],[18/12/2014],[19/12/2014],[20/12/2014],[21/12/2014],[22/12/2014],[23/12/2014],[24/12/2014],[25/12/2014],[26/12/2014],[27/12/2014],[28/12/2014],[29/12/2014],[30/12/2014],[31/12/2014]
FROM
(SELECT [SirName] + '' - '' + [SecondName] AS Name
,qry_Date.RoomNumber
,qry_Date.Date
FROM Guest RIGHT JOIN qry_Date ON Guest.ID = qry_Date.GuestID
WHERE qry_Date.RoomNumber Is Not Null) as t
PIVOT
(count(Name) FOR [Date] IN( [01/12/2014],[02/12/2014],[03/12/2014],[04/12/2014],[05/12/2014],[06/12/2014],[07/12/2014],[08/12/2014],[09/12/2014],[10/12/2014],[11/12/2014],[12/12/2014],[13/12/2014],[14/12/2014],[15/12/2014],[16/12/2014],[17/12/2014],[18/12/2014],[19/12/2014],[20/12/2014],[21/12/2014],[22/12/2014],[23/12/2014],[24/12/2014],[25/12/2014],[26/12/2014],[27/12/2014],[28/12/2014],[29/12/2014],[30/12/2014],[31/12/2014])
) as p
【问题讨论】:
-
print @query长什么样子? -
它的简单日期解析错误。以支持的格式提供您的日期,因为 mm/dd/yyyy 格式使您的日期无效。
-
Tx Rafal。 i 将 convert(NVARCHAR(MAX),qry_Date.Date,103) 更改为 convert(NVARCHAR(MAX),qry_Date.Date),现在仍然存在一个错误“列名 'Name' 无效。”
标签: sql sql-server tsql