Sql server SQL取消多列打印

Sql server SQL取消多列打印,sql-server,tsql,unpivot,Sql Server,Tsql,Unpivot,我希望下面的宽表是未填充的,但仅当用户对字段具有真实值时,以及适当的日期。 当前状态: 客户识别码 第一方电子邮件 第三方电子邮件 第一方电子邮件日期 第三方电子邮件日期 40011111 1. 1. 2021-01-22 04:38:00.000 2021-01-17 06:38:00.000 50022222 无效的 1. 无效的 2021-01-18 04:38:00.000 80066666 1. 无效的 2021-01-24 05:38:00.000 无效的 ____________

我希望下面的宽表是未填充的,但仅当用户对字段具有真实值时,以及适当的日期。 当前状态:


客户识别码 第一方电子邮件 第三方电子邮件 第一方电子邮件日期 第三方电子邮件日期 40011111 1. 1. 2021-01-22 04:38:00.000 2021-01-17 06:38:00.000 50022222 无效的 1. 无效的 2021-01-18 04:38:00.000 80066666 1. 无效的 2021-01-24 05:38:00.000 无效的 _______________ _______________________ _______________________ _______________________________ _______________________________
不能同时有多个取消PIVOT。相反,您可以根据需要使用交叉应用、内部联接或并集、全部并集或各种联接。我使用join和unpivot添加了一个示例答案

   SELECT 
       unpvt.Customer_ID 
       , [Type]
       ,  ISNULL(po.First_Party_Email ,po.Third_Party_Email) AS [Value] 
       ,CASE WHEN unpvt.Type = 'First_Party_Email' THEN po.First_Party_Email_Date
             ELSE  po.Third_Party_Email_Date  
             END AS  [Date]

     FROM   
        (
         SELECT 
           Customer_ID, First_Party_Email , Third_Party_Email  
           FROM Permissions_Obtained 
         ) p  
       UNPIVOT  
          (  [Value] FOR [Type]     IN   
               (First_Party_Email , Third_Party_Email )  
          )AS unpvt
          INNER JOIN  Permissions_Obtained [po] 
             on [po].Customer_ID = unpvt.Customer_ID

当取消多个列的旋转时,
交叉应用(值)
通常是最简单、最有效的解决方案

它为上一个表的每行创建一个虚拟表,因此将其取消数据透视到单独的行中

选择
p、 客户识别码,
v、 [类型],
v、 价值观,
v、 日期
从获得的权限
交叉应用(值)
(“第一方电子邮件”、第一方电子邮件、第一方电子邮件日期),
(“第三方电子邮件”,第三方电子邮件,第三方电子邮件日期)
)v([类型]、值、日期)
其中v.值不为空;

您在这里找到解决方案了吗?@DarkWolve