Sql server pivotsql中的语法
我正在尝试以这种格式获取日期dd/MMM/yyyy 所以我使用了下面的查询Sql server pivotsql中的语法,sql-server,tsql,Sql Server,Tsql,我正在尝试以这种格式获取日期dd/MMM/yyyy 所以我使用了下面的查询 select REPLACE(CONVERT(NVARCHAR,GETDATE(), 106), ' ', '/') 但当我试图在下面的查询中应用它时,我得到了这个错误消息 错误:消息102,级别15,状态1,第13行“,”附近的语法不正确 动态查询和REPLACE函数中缺少单引号 你忘了添加替换 应该是: DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHA
select REPLACE(CONVERT(NVARCHAR,GETDATE(), 106), ' ', '/')
但当我试图在下面的查询中应用它时,我得到了这个错误消息
错误:消息102,级别15,状态1,第13行“,”附近的语法不正确
动态查询和REPLACE函数中缺少单引号 你忘了添加替换 应该是:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(Name)
from dbo.DailySales INNER JOIN dbo.Restaurants ON dbo.DailySales.RestaurantID = dbo.Restaurants.RestaurantID
group by Name
order by Name
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT REPLACE(CONVERT(NVARCHAR, SalesDate, 106), '' '', ''/'') AS [Sales Date],' + @cols + ' from
(
select SalesDate, Restaurants.Name, GrossSales
from dbo.DailySales INNER JOIN dbo.Restaurants ON dbo.DailySales.RestaurantID = dbo.Restaurants.RestaurantID
WHERE MONTH(SalesDate) = 1 AND YEAR(SalesDate) = 2017
) x
pivot
(
sum(GrossSales)
for Name in (' + @cols + ')
) p '
execute(@query);
问题是嵌套的单引号SelectConvertNVarchar,SalesDate,106,/Chanukya仍然得到errorMsg 102,级别15,状态1,第1行“,”附近的语法不正确。消息102,15级,状态1,第6行“x”附近语法不正确。
DECLARE
@cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT ',' + QUOTENAME(Name)
FROM dbo.DailySales INNER JOIN dbo.Restaurants ON dbo.DailySales.RestaurantID = dbo.Restaurants.RestaurantID
group by Name
order by Name
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
SET @query = 'SELECT
REPLACE(CONVERT(NVARCHAR, SalesDate, 106), '' '', ''/'') AS [Sales Date],
' + @cols + '
FROM
(
SELECT
SalesDate,
Restaurants.Name,
GrossSales
FROM
dbo.DailySales
INNER JOIN dbo.Restaurants ON dbo.DailySales.RestaurantID = dbo.Restaurants.RestaurantID
WHERE
MONTH(SalesDate) = 1 AND YEAR(SalesDate) = 2017
) x
pivot
(
SUM(GrossSales)
FOR Name IN (' + @cols + ')
) p '
EXECUTE(@query);
REPLACE(CONVERT(NVARCHAR, SalesDate, 106), '' '', ''/'')
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(Name)
from dbo.DailySales INNER JOIN dbo.Restaurants ON dbo.DailySales.RestaurantID = dbo.Restaurants.RestaurantID
group by Name
order by Name
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT REPLACE(CONVERT(NVARCHAR, SalesDate, 106), '' '', ''/'') AS [Sales Date],' + @cols + ' from
(
select SalesDate, Restaurants.Name, GrossSales
from dbo.DailySales INNER JOIN dbo.Restaurants ON dbo.DailySales.RestaurantID = dbo.Restaurants.RestaurantID
WHERE MONTH(SalesDate) = 1 AND YEAR(SalesDate) = 2017
) x
pivot
(
sum(GrossSales)
for Name in (' + @cols + ')
) p '
execute(@query);