0

次の形式のSQLテーブルがあります

   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

テーブルでピボットを行っているため、テーブルを転置する必要があります

また、次のクエリでは、業界の列にスペースとそのデータに次の文字「:」が含まれているため、いくつかのエラーを含む xml 出力を取得しています。

SQL Server でテーブルのデータに基づいて列をピボットする方法はありますが、それでも列名にエイリアスを提供するか、この問題を回避する他の方法はありますか

  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)
4

1 に答える 1

0

ピボット後:の列ヘッダーのように見えるのは、失敗する原因です。CORP -: Aerospace & Defensefor 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)
于 2015-01-09T07:41:55.593 に答える