如何根据列

时间:2015-06-14 20:43:30

标签: sql sql-server

所以,我有一个包含staffassociateMatter type列的表格(总是设置为'点亮'或者' PSD& #39;。)

当type field =' Lit'我需要在Staff语句中包含Staff字段作为staff字段。当类型字段设置为' PSD'我需要将关联字段包含在select语句中的staff字段中。

我知道我可以将它作为两个单独的查询来完成,但我无法弄清楚如何将这两个查询合并为一个查询 - 这是一个简单的答案,但在一段时间内无法弄清楚,我只是没有提出答案。

想法?

4 个答案:

答案 0 :(得分:3)

SELECT
    CASE WHEN
        [MatterType] = 'Lit'
    THEN
        [Staff]
    ELSE
        [Associate]
    END AS [NewStaff]
FROM
    MyTable;

这在SELECT列表中使用内联案例条件。

答案 1 :(得分:3)

要合并两个具有相同列数的查询的结果,您可以使用UNION ALLUNION。最好是因为较少的开销而联合所有。

SELECT  staff AS staff ,
        mattertype
FROM    my_table
WHERE   mattertype = 'Lit'
UNION ALL
SELECT  associate AS staff ,
        mattertype
FROM    my_table
WHERE   mattertype = 'PSD'

在您的情况下,我会说使用CASE更好:

SELECT  CASE WHEN mattertype = 'Lit' THEN staff
             ELSE associate
        END AS staff
       ,mattertype
FROM    my_table

答案 2 :(得分:2)

如果我理解你的问题,你需要员工或员工作为一个名为员工的专栏,取决于物质的价值。如果这是cas,您可以使用条件case ... when语句来选择适当的列。像这样:

select matter, case when matter = 'Lit' then staff else associate end as staff from table

当你声明问题必须是Lit或PSD时,你只需要检查它是否是其中一个值,否则它必须是另一个(尽管为了清楚起见你可以明确检查)。

答案 3 :(得分:0)

其他答案涵盖了普通&实用,所以这里有一个有时有用的变化。如果staff列在[Matter type] = 'PSD'时为空,那么这将起作用:

SELECT COALESCE(staff,associate) AS staff
FROM tablename
;