2014-05-12 66 views
3

我发现UNPIVOT能够自动排除具有NULL值的字段。但是,CROSS APPLY-VALUES方法无法做到这一点。有谁知道如何自动排除CROSS APPLY-VALUES中的NULL值字段?比方说,如果它们包含NULL值,排除Field3和Field4。CROSS APPLY与UNPIVOT

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) 
+0

请注意,标签的独立。也就是说,你不能合并多个标签来创建一个概念。标签'[sql]'和'[server]'与单个'[sql-server]'标签不同。 **一定要阅读选择标签时出现的描述!** – Charles

+0

对不起,我没有足够的声誉来交叉申请。 – Casperonian

+0

我不确定是什么让你觉得你需要声望来使用该标签。您只需要* create *标记的某个级别,[tag:cross-apply]存在。 – Charles

回答

8

而不是使用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);