【问题标题】:Pivot dataset with column names具有列名的数据透视表
【发布时间】:2016-07-01 07:15:01
【问题描述】:

如果您有表格(示例)

   declare @MyTable table (
CustomerName nvarchar(50),
BirthDate datetime,
BirtPlace nvarchar(50),
Phone nvarchar(50),
Email nvarchar(50)
)

insert into @MyTable
        (
         CustomerName,
         BirthDate,
         BirtPlace,
         Phone,
         Email
        )
values  (
         'Customer1', 
         '12.05.1990', 
         'Place1', 
         N'+000125456789', 
         N'customer@customer.com' 
        )

是否有可能得到以下结果集:

    CustomerName   Customer1
    BirtDate       1990-12-05 
    BirtPlace      Place1
    Phone          +000125456789
    Email          customer@customer.com 

类似于 pivot 的东西,但我不知道如何得到这个结果。

【问题讨论】:

标签: sql sql-server unpivot


【解决方案1】:

当您想要将列更改为行时,您想要的函数是 unpivot 而不是 pivot

这应该可以解决问题:

SELECT col, val
FROM 
( 
    SELECT 
        CustomerName, 
        CAST(BirthDate AS NVARCHAR(50)) BirthDate, 
        BirtPlace, 
        Phone, 
        Email  
    FROM @MyTable
) AS t
UNPIVOT 
(
    val FOR col IN (CustomerName, BirthDate, BirtPlace, Phone, Email)
) AS u

【讨论】:

  • 谢谢这对我有帮助
【解决方案2】:

试试这个

SELECT myColumn, myDetail    
FROM
(
    SELECT
        CustomerName,
        CONVERT(NVARCHAR(50),BirthDate,121) AS BirthDate,
        BirtPlace,
        Phone,
        Email
    FROM
        @MyTable
) AS A
UNPIVOT
(
    myDetail FOR myColumn IN (CustomerName, BirthDate, BirtPlace, Phone, Email)
) AS tbUnpivot

【讨论】:

    【解决方案3】:

    这是一个unpivot的问题,如果你使用旧版本的sql server 2000,这个unpivot语法将不起作用,那么你可以使用UNION

    SELECT 'CustomerName' AS colName, CustomerName AS colVal FROM @MyTable
    UNION
    SELECT 'BirthDate' AS colName, CAST(BirthDate AS NVARCHAR(50)) AS colVal FROM @MyTable
    UNION
    SELECT 'BirthPlace' AS colName, BirthPlace AS colVal FROM @MyTable
    UNION
    SELECT 'Phone' AS colName, Phone AS colVal FROM @MyTable
    UNION
    SELECT 'Email' AS colName, Email AS colVal FROM @MyTable;
    

    【讨论】:

      【解决方案4】:
       SELECT CustomerName,BirtDate,BirtPlace,Phone,Email FROM @MyTable\G 
      

      您没有 ID 也没有外键,所以我认为这是解决您问题的一种方法。 \G 将 SQL 查询作为列表提供给您。

        values  (
           'Customer1', '1990-12-05', 'Place1', '+000125456789', 'customer@customer.com' 
          );
      

      希望能帮到你

      祝你有美好的一天

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-14
      相关资源
      最近更新 更多