在Query中为一列写入CASE条件

时间:2016-06-30 08:34:31

标签: sql sql-server sql-server-2005

我有一个查询,其中,我想应用CASE条件。这是我的问题:

Select 
    a.mkey, a.party_name, a.doc_no Inward_No, 
    c.type_desc Doc_Type, a.ref_no, 
    convert(varchar(25),a.ref_date,103) Ref_date,
    a.Inward_amt, b.first_name + ' ' + b.last_name ToUser --- here
from 
    inward_doc_tracking_hdr a
inner join 
    user_mst b on a.To_User = b.mkey
inner join 
    type_mst_a c on a.doc_type = c.master_mkey  
                 and a.mkey =227423

我想要的是:如果ToUserNULL,那么我想取Last_To_User代替。{/ p>

如何在SQL Server中执行此操作?

6 个答案:

答案 0 :(得分:2)

试试这个 - 只需在名字和名字的连接处使用ISNULL

Select 
    a.mkey, a.party_name, a.doc_no Inward_No, 
    c.type_desc Doc_Type, a.ref_no, 
    convert(varchar(25),a.ref_date,103) Ref_date,
    a.Inward_amt, 
    -- if the first_name+last_name is NULL, then take Last_To_User instead
    ISNULL(b.first_name + ' ' + b.last_name, Last_To_User) ToUser 
from 
    inward_doc_tracking_hdr a
inner join 
    user_mst b on a.To_User = b.mkey
inner join 
    type_mst_a c on a.doc_type = c.master_mkey  
                 and a.mkey =227423

答案 1 :(得分:0)

不需要大小写,您可以使用将返回第一个非空值的coalesce函数:

b.first_name + ' ' + b.last_name + coalesce(Touser,Last_To_User)

答案 2 :(得分:0)

而不是b.first_name + ' ' + b.last_name使用以下内容:

CASE
 WHEN b.first_name IS NULL THEN b.first_name + ' ' + b.last_name
 ELSE Last_To_User
END

答案 3 :(得分:0)

现在问题很清楚,所以我会告诉你这个,你使用内连接来连接表user_mst,条件是To_User,所以你已经过滤了To_User为空的行,你知道,Null无法连接任何事情,所以尽量让它离开加入

Select a.mkey, a.party_name, a.doc_no Inward_No, c.type_desc Doc_Type, a.ref_no, 
    convert(varchar(25),a.ref_date,103) Ref_date,
            a.Inward_amt, 
            case when To_User is null then Last_To_User
            else b.first_name + ' ' + b.last_name end as ToUser --- here
        from inward_doc_tracking_hdr a
    left join user_mst b
on a.To_User = b.mkey
        inner join type_mst_a c
    on a.doc_type = c.master_mkey   
    and a.mkey =227423    

答案 4 :(得分:0)

我认为你的帖子让大多数人感到困惑,也可能是我。阅读评论之后,您似乎想要使用To_User(b.first_name + ' ' + b.last_name的列,而不是您的别名列{}} IS NOT NULL,如果IS NULL,那么您需要Last_to_User那么你应该像这样使用COALESCE

COALESCE(To_User,Last_To_User,'')

这将为您提供列表中的第一个NOT NULL值。因此,如果To_User IS NOT NULL将返回。如果IS NULL,则会返回Last_To_User,除非它也是NULL,否则将返回空白。

答案 5 :(得分:0)

我不确定我是否比其他人更少困惑,我不是专家,这看起来很简陋,但我最简单的答案是;

WITH QUERY1 AS (

Select 
a.mkey, 
a.party_name, 
a.doc_no AS Inward_No, 
c.type_desc 
Doc_Type, 
a.ref_no, 
convert(varchar(25),a.ref_date,103) AS Ref_date,
a.Inward_amt, 
b.first_name + ' ' + b.last_name AS ToUser --- here
from 
inward_doc_tracking_hdr a
inner join 
user_mst b on a.To_User = b.mkey
inner join 
type_mst_a c on a.doc_type = c.master_mkey  
             and a.mkey =227423
             )
SELECT *,
   CASE WHEN ToUser IS NULL
   THEN Last_To_User
   ELSE ToUser
FROM QUERY1