【问题标题】:c# unpivot columns in rows时间:2019-01-10 标签:c#unpivotcolumn in rows
【发布时间】:2020-09-30 14:46:09
【问题描述】:

我有这些栏目:

  1. 身份证
  2. 姓名
  3. 地址
  4. 一个
  5. b
  6. c
  7. d
  8. e
  9. f

我需要将列从 a 转为 f 才能拥有:

身份证 姓名 地址 回复

CREATE PROCEDURE [dbo].[sProcedure]
AS
    
    BEGIN
    DECLARE @UnpivotList NVARCHAR(MAX) = N'';
    SELECT @UnpivotList = CONCAT(@UnpivotList, ',(''fe.[', c.name, '])')
    FROM 
       sys.columns c
    WHERE 
       c.object_id = OBJECT_ID('_myTable')
       AND c.column_id >3;


    DECLARE @sql NVARCHAR(MAX) = CONCAT(N'
    SELECT 
       fe.ID,
       fe.Name,
       fe.Address,
       ul.res
    INTO
       newTable
    FROM 
      myTable fe
       CROSS APPLY ( VALUES ', STUFF(@UnpivotList, 1, 1, ''), N') ul (res)'
       );
    EXEC sys.sp_executesql @sql;
END 

但它不起作用,有人可以帮帮我吗?

【问题讨论】:

    标签: sql-server tsql unpivot


    【解决方案1】:

    这是一个选项,它可以“动态地”在不实际使用动态 SQL 的情况下对数据进行反透视

    如果

    示例

    Declare @YourTable Table ([ID] varchar(50),[Name] varchar(50),[address] varchar(50),[a] varchar(50),[b] varchar(50),[c] varchar(50),[d] varchar(50),[e] varchar(50),[f] varchar(50))  Insert Into @YourTable Values 
     (1,'Jane','123 Main','val1','val2','val3','val4','val5','val6')
     
    Select A.ID
          ,A.Name
          ,A.Address
          ,C.* 
     From  @YourTable A
     Cross Apply ( Select A.* for JSON Path,Without_Array_Wrapper) B(JSONData)
     Cross Apply (
                    Select [Key]
                          ,[Value]
                     From OpenJson(JSONData) 
                     Where [Key] not in ('ID','Name','address')   ---<< Optional
                 )  C
    

    退货

    ID  Name    Address     Key   Value
    1   Jane    123 Main    a     val1
    1   Jane    123 Main    b     val2
    1   Jane    123 Main    c     val3
    1   Jane    123 Main    d     val4
    1   Jane    123 Main    e     val5
    1   Jane    123 Main    f     val6
    

    【讨论】:

      猜你喜欢
      • 2012-09-18
      • 2015-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多