交叉应用与 UNPIVOT
Posted
技术标签:
【中文标题】交叉应用与 UNPIVOT【英文标题】:CROSS APPLY versus UNPIVOT 【发布时间】:2014-05-12 03:17:27 【问题描述】:我发现 UNPIVOT 能够自动排除具有 NULL 值的字段。但是,CROSS APPLY-VALUES 方法无法做到这一点。有谁知道如何从 CROSS APPLY-VALUES 中自动排除 NULL 值字段?比方说,如果字段 Field3 和 Field4 包含 NULL 值,则排除它们。
SELECT
E.FieldA,
E.FieldB,
E.FieldC,
DBParam.Display,
DBParam.Value
INTO DBParam
FROM
Map_Data AS E
CROSS APPLY (VALUES (Field1, 'Field1'),
(Field2, 'Field2'),
(Field3, 'Field3'),
(Field4, 'Field4')
) AS DBParam(Value, Display)
【问题讨论】:
请注意标签是独立的。也就是说,您不能组合多个标签来创建一个概念。标签[sql]
和[server]
一起与单个[sql-server]
标签不同。 请务必阅读选择标签时出现的说明!
对不起,我没有足够的声誉来交叉申请。
我不确定是什么让您认为您需要声誉才能使用该标签。 create 标签只需要一定级别的代表,cross-apply 存在。
谢谢。你有我的问题的答案吗?
【参考方案1】:
不要使用VALUES
,而是使用SELECT
:
SELECT E.FieldA, E.FieldB, E.FieldC,
DBParam.Display, DBParam.Value
INTO DBParam
FROM Map_Data E CROSS APPLY
(SELECT Value, Display
FROM (SELECT Field1 as Value, 'Field1' as Display UNION ALL
SELECT Field2, 'Field2' UNION ALL
SELECT Field3, 'Field3' UNION ALL
SELECT Field4, 'Field4'
) vd
WHERE Value is not null
) as DBParam(Value, Display);
【讨论】:
以上是关于交叉应用与 UNPIVOT的主要内容,如果未能解决你的问题,请参考以下文章
使用内连接,左外连接,交叉应用获取语法错误与 Where 子句
多部分标识符无法与交叉应用绑定到具有 OPENQUERY 的链接服务器功能