2014-05-12 127 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);