SQL Server动态字段名称

时间:2013-10-14 12:30:07

标签: sql sql-server sql-server-2008

我有一个连接两个表并提供结果的查询:

A.ID    A.SelectedField B.ID    B.Field1    B.Field2    B.Field3 
1           Field1           1    **0**          20           30
2           Field2           2    11             **21**        0 
3           Field3           3    12             22           **0** 
4           Field3           4    13             0            **33**

我只需要检索所选字段不为0的行,所以我想要的结果是:

A.ID    A.SelectedField B.ID    B.Field1    B.Field2    B.Field3 
2            Field2          2    11             21           0 
4            Field3          4    13             0            33 

我该怎么做?

2 个答案:

答案 0 :(得分:1)

这样的事情应该有效:

WHERE 
 CASE A.SelectedField WHEN 'Field1' THEN B.Field1
                      WHEN 'Field2' THEN B.Field2
                      WHEN 'Field3' THEN B.Field3
                      ELSE 0 -- default value
 END <> 0

<强> SQLFiddle DEMO

答案 1 :(得分:0)

SELECT CASE WHEN A.SelectedField = 'Field1' AND  B.Field1 <> 0 THEN  A.SelectedField 
            WHEN A.SelectedField = 'Field2' AND  B.Field2 <> 0 THEN  A.SelectedField        
            WHEN A.SelectedField = 'Field3' AND  B.Field3 <> 0 THEN  A.SelectedField 
            ELSE NULL
        END