【问题标题】:pivot for comma separated values for multiple columns透视多列的逗号分隔值
【发布时间】:2014-07-06 08:00:34
【问题描述】:

我有一个如下查询,它给了我如图所示的结果集

SELECT  E1.Name,E1.AccountType ,
        STUFF(( SELECT DISTINCT ', ' + CAST(E2.AccountNumber as nvarchar(50))
                FROM    @temp AS e2 
                WHERE   e1.Name = e2.Name and e1.AccountType = e2.AccountType
                FOR XML PATH('')
            ), 1, 2, '') AS AccountNumber ,
          STUFF(( SELECT DISTINCT ', ' + CAST(E2.CustomerNumber as nvarchar(50))
                FROM    @temp AS e2 
                WHERE   e1.Name = e2.Name and e1.AccountType = e2.AccountType
                FOR XML PATH('')
            ), 1, 2, '')  AS CustomerNumber     

FROM    @temp AS e1 
GROUP BY Name,AccountType

现在我想旋转这个结果集,而不是三行,我的结果集只包含一行,对于 C,I,T,每个 AccountNumber,CustomerNumber 三列。

我已经编写了以下查询以使用单个 AccountNumber 列进行透视,并且它对我有用,但我不知道如何在此透视中包含另一列 CustomerNUmber

这是我为带有结果集图像的单列枢轴编写的查询

SELECT  * from 
(
SELECT  E1.Name,E1.AccountType ,
        STUFF(( SELECT DISTINCT ', ' + CAST(E2.AccountNumber as nvarchar(50))
                FROM    @temp AS e2 
                WHERE   e1.Name = e2.Name and e1.AccountType = e2.AccountType
                FOR XML PATH('')
            ), 1, 2, '') AS AccountNumber   

FROM    @temp AS e1 
GROUP BY Name,AccountType
) as src 
PIVOT  (MAX(AccountNumber) FOR AccountType IN (C,I,T) )AS pvt

已编辑:

sqlfiddle link

【问题讨论】:

  • 您想在同一字段中同时使用 C、I、T 的帐号和客户编号,还是要在同一字段中使用 C、I、T 和单独的 C、I、T 客户?
  • 你能用一些示例数据和你的表结构创建一个 SQL Fiddle 吗?
  • @Tristan 是的,你是对的。我的结果表应该是这样的 NAME,Account_I,Account_C,Account_T,Customer_I,Customer_C,Customer_T 并且只有一行。
  • @bluefeet sql fiddle 链接包括。谢谢

标签: sql sql-server sql-server-2008 pivot


【解决方案1】:

--如果您只想连接每个组及其对应的值,则无需 Pivot


SELECT *
FROM (
    SELECT E1.[Field_Type]
        ,STUFF((
                SELECT CASE 
                        WHEN E1.[Field_Type] = b.[Field_Type]
                            THEN ', ' + E2.COLUMN_NAME
                        END
                FROM [DB].[Schema].[Table1] b
                INNER JOIN INFORMATION_SCHEMA.COLUMNS E2
                    ON E2.COLUMN_NAME = b.COLUMN_NAME
                FOR XML PATH('')
                ), 1, 2, '') AS a
    FROM [DB].[Schema].[Table1] AS e1
    GROUP BY [Field_Type]
    ) AS src

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多