繁体   English   中英

使用NA进行SQL连接和替换空间

[英]SQL Joining and Replacing spaces with NA

我正在尝试加入两个SQL查询

例如

  • 表1有Empname,Empcode
  • 表2具有Empname,Empcode,Empsalary

我试图获取没有工资的地方的名称和工资详细信息,但必须将其反映为“ NA”

我的查询是:

select a.Empname,if((Empsalary=" "),"NA",b.salary) as salary
from
(select Empname,empcode from Table 1) as a
inner join all
(select Empcode,Empsalary from Table 2) as b
on a.empcode=b.empcode

此查询正确吗?

select 
  a.Empname,
  CASE 
    WHEN b.Empsalary = '' OR b.Empsalary IS NULL THEN 'NA' 
    ELSE b.Empsalary 
  END as salary
from Table 1 as a
inner join Table 2 as b on a.empcode = b.empcode

您可以使用;

ISNULL(field_name, 'NA')

Mahmoud Gamal发布的内容的一个更好的变体是此列,该列的LTRIMRTRIM ,因此,如果该行在薪金列中有space ,则将其消除。 LTRIMRTRIM从字符串中删除左右空格。

您将使用它来确保始终比较同一件事,因为“”与“”不同。

select 
  a.Empname,
  CASE 
    WHEN LTRIM(RTRIMb.Empsalary)) = '' OR b.Empsalary IS NULL THEN 'NA' 
    ELSE b.Empsalary 
  END as salary
from Table 1 as a
inner join Table 2 as b on a.empcode = b.empcode

ISNULL是方言特定的运算符; COALESCE是ANSI版本(工作原理相同,但可以有两个以上参数,并且返回第一个不为null的参数)。

给定左联接是否合适,因为您可能有一个emp,但是没有任何条目(而不是表2中的零薪水)

SELECT t1.Empname, t1. Empcode, COALESCE(t2.Empsalary, 'NA')
FROM Table1 t1 LEFT JOIN Table2 t2 
  ON t1.EmpCode = t2.EmpCode

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM