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