在 SQL PIVOT 中拆分串联 FOR
Splitting Concatenated FOR in SQL PIVOT
我在下面使用 Dynamic SQL 创建新列并将它们旋转出来,但是 [MonthList]
字段是串联的,需要以某种方式拆分它,因为它目前 [Monthly Rate]
值仅当 [MonthList] = @PivotColumns
名称
table 示例:
当前代码:
Set @SQLQuery =
N'SELECT *
FROM [dbo].[TableA]
PIVOT( sum([Monthly Rate])
FOR [MonthsList] IN (' + @PivotColumns + ')) as P'
EXEC sp_executesql @SQLQuery
感谢您的帮助!
设法使用 Cursor 得出答案。如果有人对这里感兴趣:
DECLARE @Q NVARCHAR(4000),
@CName VARCHAR(255)
DECLARE ColCur CURSOR
FOR
SELECT C.name as Column_name
FROM sys.columns C
LEFT JOIN sys.tables t
on C.object_id = t.object_id
WHERE t.name = 'TableA'
OPEN ColCur
FETCH NEXT FROM ColCur INTO @CName
WHILE(@@FETCH_STATUS =0)
BEGIN
SET @Q =
case when @CName like '___''__' then
'UPDATE TableA
SET ['+@CName+'] = [Monthly Rate]
WHERE [MonthsList] like ''%'+replace(@CName,char(39),char(39)+char(39))+'%'''
Else ''
end
--print @q
EXEC sp_executesql @Q
FETCH NEXT FROM ColCur INTO @CName
END
CLOSE ColCur
DEALLOCATE ColCur
我在下面使用 Dynamic SQL 创建新列并将它们旋转出来,但是 [MonthList]
字段是串联的,需要以某种方式拆分它,因为它目前 [Monthly Rate]
值仅当 [MonthList] = @PivotColumns
名称
table 示例:
当前代码:
Set @SQLQuery =
N'SELECT *
FROM [dbo].[TableA]
PIVOT( sum([Monthly Rate])
FOR [MonthsList] IN (' + @PivotColumns + ')) as P'
EXEC sp_executesql @SQLQuery
感谢您的帮助!
设法使用 Cursor 得出答案。如果有人对这里感兴趣:
DECLARE @Q NVARCHAR(4000),
@CName VARCHAR(255)
DECLARE ColCur CURSOR
FOR
SELECT C.name as Column_name
FROM sys.columns C
LEFT JOIN sys.tables t
on C.object_id = t.object_id
WHERE t.name = 'TableA'
OPEN ColCur
FETCH NEXT FROM ColCur INTO @CName
WHILE(@@FETCH_STATUS =0)
BEGIN
SET @Q =
case when @CName like '___''__' then
'UPDATE TableA
SET ['+@CName+'] = [Monthly Rate]
WHERE [MonthsList] like ''%'+replace(@CName,char(39),char(39)+char(39))+'%'''
Else ''
end
--print @q
EXEC sp_executesql @Q
FETCH NEXT FROM ColCur INTO @CName
END
CLOSE ColCur
DEALLOCATE ColCur