2013-05-21 2 views
1

Я пытаюсь соединить два SQL запросовSQL Объединение и замена пробелов с НС

, например

  • Table1 имеют EmpName, Empcode
  • TABLE2 имеют EmpName, Empcode, Empsalary

Я пытаюсь получить информацию о названии и зарплате везде, где нет зарплаты, тогда она должна отражать как «НС»

Мой запрос является:

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 

Является ли это запрос правильно.

ответ

1
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 
0

Вы можете использовать;

ISNULL(field_name, 'NA') 
+0

я думаю .. это 'NVL()' функция – Ravi

+0

, когда вам используйте oracle, тогда да это nvl() – rcpayan

0

Немного лучше вариант, что отправил Махмуд Гамаль это один с LTRIM и RTRIM на колонке, так что если линия имеет space в столбце зарплаты она удаляется. LTRIM и RTRIM удаляет левые и правые пробелы из строки.

Вы использовали бы это, чтобы быть уверенным, что всегда сравниваете одно и то же, потому что '' отличается от ''.

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 
0

ISNULL - специфический для диалекта оператор; COALESCE - это версия ANSI (работает одинаково, но может иметь более двух параметров и возвращает первое значение, которое не является нулевым).

0

ли левый присоединиться соответствующими дали вам, возможно, придется ЭМ, но не запись (а не просто нулевая зарплаты в таблице 2)

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