微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#取消透视行中的列

如何解决C#取消透视行中的列

我有这些专栏:

  1. ID
  2. 名称
  3. 地址
  4. a
  5. b
  6. c
  7. d
  8. e
  9. f

我需要取消从a到f的列才能具有:

ID 名称 地址 回复

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,''),N') ul (res)'
       );
    EXEC sys.sp_executesql @sql;
END 

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

解决方法

这里是一个选项,可以“动态”取消透视数据,而无需实际使用动态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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。