FOR XML in SQL 服务器导致空格和问题:
FOR XML in SQL Server causing issue with spaces and :
我有以下格式的 sql table
deal_key std_industry_name balance
823155199 CORP -: Aerospace & Defense 10169652.43
823155199 CORP -: Automotive 10155993.82
823155199 CORP -: Beverage 14779701.43
823155199 CORP -: Capital Equipment 15150957.89
823155199 CORP -: Chemicals 14438116.97
823155199 CORP -: Construction 4901198.24
823155199 CORP -: Consumer goods 9647987.3
我需要转置 table,因此我在 table
上做一个支点
通过以下查询,我得到的 xml 输出有一些错误,因为 industry 列在其数据中包含空格和以下字符“:”。
SQL 服务器中是否有一种方法可以根据 table 中的数据对列进行透视,但仍然为列名提供别名,或者是否有任何其他方法可以避免此问题
DECLARE @query VARCHAR(4000)
DECLARE @years VARCHAR(2000)
SELECT @years = STUFF(( SELECT DISTINCT
'],[' + ltrim((std_industry_name))
FROM [cs].[ma_deal_vintage_industry_statistics]
FOR XML PATH('')
), 1, 2, '') + ']'
SET @query =
'SELECT * FROM
(
SELECT deal_key, std_industry_name,balance
FROM [cs].[ma_deal_vintage_industry_statistics]
where deal_key =''823155199''
)t
PIVOT (SUM(balance) FOR std_industry_name
IN ('+@years+')) AS pvt for xml auto'
EXECUTE (@query)
看起来像 :
列 header CORP -: Aerospace & Defense
后旋转是导致 for Xml auto
失败的原因。
替换数据透视源查询和列列表中的 :
。试试这个。
DECLARE @query VARCHAR(4000)
DECLARE @years VARCHAR(2000)
SELECT @years = STUFF(( SELECT DISTINCT
'],[' + ltrim((replace(std_industry_name,':','')))
FROM [cs].[ma_deal_vintage_industry_statistics]
FOR XML PATH('')
), 1, 2, '') + ']'
SET @query =
'SELECT * FROM
(
SELECT deal_key, replace(std_industry_name,'':'','''') std_industry_name,balance
FROM [cs].[ma_deal_vintage_industry_statistics]
where deal_key =''823155199''
)t
PIVOT (SUM(balance) FOR std_industry_name
IN ('+@years+')) AS pvt for xml auto'
EXECUTE (@query)
我有以下格式的 sql table
deal_key std_industry_name balance
823155199 CORP -: Aerospace & Defense 10169652.43
823155199 CORP -: Automotive 10155993.82
823155199 CORP -: Beverage 14779701.43
823155199 CORP -: Capital Equipment 15150957.89
823155199 CORP -: Chemicals 14438116.97
823155199 CORP -: Construction 4901198.24
823155199 CORP -: Consumer goods 9647987.3
我需要转置 table,因此我在 table
上做一个支点通过以下查询,我得到的 xml 输出有一些错误,因为 industry 列在其数据中包含空格和以下字符“:”。
SQL 服务器中是否有一种方法可以根据 table 中的数据对列进行透视,但仍然为列名提供别名,或者是否有任何其他方法可以避免此问题
DECLARE @query VARCHAR(4000)
DECLARE @years VARCHAR(2000)
SELECT @years = STUFF(( SELECT DISTINCT
'],[' + ltrim((std_industry_name))
FROM [cs].[ma_deal_vintage_industry_statistics]
FOR XML PATH('')
), 1, 2, '') + ']'
SET @query =
'SELECT * FROM
(
SELECT deal_key, std_industry_name,balance
FROM [cs].[ma_deal_vintage_industry_statistics]
where deal_key =''823155199''
)t
PIVOT (SUM(balance) FOR std_industry_name
IN ('+@years+')) AS pvt for xml auto'
EXECUTE (@query)
看起来像 :
列 header CORP -: Aerospace & Defense
后旋转是导致 for Xml auto
失败的原因。
替换数据透视源查询和列列表中的 :
。试试这个。
DECLARE @query VARCHAR(4000)
DECLARE @years VARCHAR(2000)
SELECT @years = STUFF(( SELECT DISTINCT
'],[' + ltrim((replace(std_industry_name,':','')))
FROM [cs].[ma_deal_vintage_industry_statistics]
FOR XML PATH('')
), 1, 2, '') + ']'
SET @query =
'SELECT * FROM
(
SELECT deal_key, replace(std_industry_name,'':'','''') std_industry_name,balance
FROM [cs].[ma_deal_vintage_industry_statistics]
where deal_key =''823155199''
)t
PIVOT (SUM(balance) FOR std_industry_name
IN ('+@years+')) AS pvt for xml auto'
EXECUTE (@query)