SQL: преобразование не удалось - PullRequest
0 голосов
/ 06 июня 2018
SELECT
    *
    ,CASE
        WHEN emp_type='a' then '30'
        when emp_type='b' then '20'
        else '25' end as s
    , case when tbl_cut.dir_date='0' or tbl_cut.nameOFmonthe_cut='2018/05' then (coalesce(work_days_cut,0)-coalesce(count(addCut_id),0))
    else  (coalesce(s,0)-coalesce(count(addCut_id),0) end as 'days'
    , case when tbl_cut.dir_date='0' or tbl_cut.nameOFmonthe_cut='2018/05' then (((coalesce(work_days_cut,0)-coalesce(count(addCut_id),0)))*(coalesce([emp_price],0)))
    else (((coalesce((cast('s'as int)),0)-coalesce(count(addCut_id),0)))*(coalesce([emp_price],0))) end as 'salary'
FROM
(
    select distinct (emp_id)
    from
    (
        select emp_id  from tbl_employee
        union select emp_id from tbl_add_cut
        union select emp_id from tbl_cut
    ) tmp
) emp_ids

left join tbl_add_cut 
    on tbl_add_cut.emp_id=emp_ids.emp_id 
    and nameOFmonthe='2018/05'
left join tbl_cut 
    on tbl_cut.emp_id=emp_ids.emp_id
left join tbl_employee 
    on tbl_employee.emp_id=emp_ids.emp_id
inner join tbl_department
    on tbl_employee.depart_id=tbl_department.depart_id

--where emp_name like '%'+ @emp_name + '%' and [emp_type]=@emp_type
group by 
    tbl_employee.emp_id,tbl_employee.emp_name,tbl_department.depart_Des,[emp_degree], 
    tbl_employee.[emp_price],[emp_type],tbl_add_cut.nameOFmonthe, work_days_cut,
    tbl_cut.nameOFmonthe_cut,tbl_cut.dir_date,emp_work_days

Я получаю эту ошибку

Ошибка преобразования при преобразовании значения varchar 's' в тип данных int.

Спасибо

1 Ответ

0 голосов
/ 06 июня 2018

Хорошо, я вижу это.Вы создаете поле зарплаты под названием 's', но пока не можете ссылаться на него, потому что оно находится в том же запросе.Просто используйте тот же оператор CASE для 's' во втором операторе CASE, на который вы ссылаетесь.Здесь я удалил CAST во 2-м использовании, потому что вы хотите, чтобы оно было целым числом, а не строкой (убрал CAST, удалил одинарные кавычки вокруг чисел):

, CASE
    WHEN emp_type='a' then '30'
    when emp_type='b' then '20'
    else '25' end as s
, case when tbl_cut.dir_date='0' or tbl_cut.nameOFmonthe_cut='2018/05' then (coalesce(work_days_cut,0)-coalesce(count(addCut_id),0))
else  (coalesce(s,0)-coalesce(count(addCut_id),0) END as 'days'
, case when tbl_cut.dir_date='0' or tbl_cut.nameOFmonthe_cut='2018/05' then (((coalesce(work_days_cut,0)-coalesce(count(addCut_id),0)))*(coalesce([emp_price],0)))
else (((coalesce((CASE
    WHEN emp_type='a' then 30
    when emp_type='b' then 20
    else 25 end),0)-coalesce(count(addCut_id),0)))*(coalesce([emp_price],0))) end as 'salary'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...