我有一个查询,其中,我想应用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
我想要的是:如果ToUser
为NULL
,那么我想取Last_To_User
代替。{/ p>
如何在SQL Server中执行此操作?
答案 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