【问题标题】:In SQL Server, how to show table rows value in column? [duplicate]在 SQL Server 中,如何在列中显示表行值? [复制]
【发布时间】:2017-06-17 19:24:23
【问题描述】:

我正在使用 SQL Server 2012,我的表如下所示:

Customer    Status         StatusType
----------------------------------------
  3         Ok             personalInfo
  3         Pending        FinancialInfo
  3         NeedUpdate     CompanyInfo

要在这里得到结果,我需要一个 SQL 查询:

Customer    PersonalInfo    FinancialInfo   CompanyInfo
---------------------------------------------------------
    3       Ok              Pending         NeedUpdate

【问题讨论】:

  • 只需要Pivot 或查询即可将行转换为列。就是这样。

标签: sql sql-server


【解决方案1】:
    CREATE TABLE #Table1
    ([Customer] int, [Status] varchar(10), [StatusType] varchar(13))
;

INSERT INTO #Table1
    ([Customer], [Status], [StatusType])
VALUES
    (3, 'Ok', 'personalInfo'),
    (3, 'Pending', 'FinancialInfo'),
    (3, 'NeedUpdate', 'CompanyInfo')      
SELECT * 
    FROM #Table1
    PIVOT ( max([status])
      for [StatusType] in ([PersonalInfo], [FinancialInfo], [CompanyInfo])) AS pvt

输出

Customer    PersonalInfo    FinancialInfo   CompanyInfo
3             Ok             Pending         NeedUpdate

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX);

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.[StatusType]) 
            FROM #Table1 c
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT customer, ' + @cols + ' from 

                #Table1
    PIVOT ( max([status])
      for [StatusType] in ([PersonalInfo], [FinancialInfo], [CompanyInfo])) AS pvt'


exec(@query)

【讨论】:

  • 有一个问题,Pivot in operator,I StatusType 不是固定的,它们是动态的
猜你喜欢
  • 2016-09-14
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
  • 2013-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多