Выберите значение столбца = 0, если идентификатор пакета равен нулю

#sql-server #tsql

#sql-сервер #tsql

Вопрос:

Мне нужно выбрать 0 в packageid, если testid != packageid, это оператор select и пример:

 select distinct Order_Details_Cash.TESTID as 'Test ID' , 
       testname  as 'Test Name'  , 
       dept_name as 'Section Name' ,
       departments.Dept_id as 'dept id',
       sample_kind.Desc_Sample_kind as 'Sample Kind',
       Lab_Packages.packageid as 'package id'    
FROM Order_Details_Cash
inner join LabTests on Order_Details_cash.TESTID = LabTests.TestId
inner join Sample_Kind on LabTests.ID_sample = sample_kind.ID_sample
inner join Departments on LabTests.Dept_id = Departments.Dept_id
inner join Lab_orders_Cash on Lab_orders_Cash.cash_order_id = Order_Details_Cash.CASH_ORDER_ID
left join Lab_Packages on Order_Details_Cash.TESTID = Lab_Packages.packageid
where CONVERT(varchar,[Order_Details_Cash].CASH_ORDER_ID) = 2000000805
and Lab_orders_Cash.order_status = 1
  

И вывод для этого выбора:

 Test ID    Test Name                 Section Name        dept id    Sample Kind package id
  5        IRON                      Clinical Chemistry  2          Serum        NULL
  7        FERRITIN                  Hormones            4          Serum        NULL
 7314      General Check Up package  Hematology          1          Serum        7314
  

Как выбрать packageid = 0 для тестов с идентификаторами 5 и 7, которые являются обычными тестами, а не пакетом, из левого соединения я выбираю packageid:

 left join Lab_Packages on Order_Details_Cash.TESTID = Lab_Packages.packageid
  

и мне нужно выбрать packageid= 0, если testid отсутствует в Lab_Packages.packageid

 Order_Details_Cash.TESTID != Lab_Packages.packageid
  

И мне нужно, чтобы выходные данные для этого выбора были:

 Test ID    Test Name                 Section Name        dept id    Sample Kind package id
  5        IRON                      Clinical Chemistry  2          Serum        0
  7        FERRITIN                  Hormones            4          Serum        0
 7314      General Check Up package  Hematology          1          Serum        7314
  

Комментарии:

1. COALESCE(Lab_Packages.packageid,0) ?

2. @DaleK спасибо, что он работает так, как мне нужно, я помещаю его в select COALESCE (Lab_Packages.packageid,0) как «идентификатор пакета», отвечающий на вопрос 🙂

Ответ №1:

Просто сделайте последнее поле 0, если оно равно нулю. Объединить (Lab_Packages.packageid,0) как «идентификатор пакета»

   select distinct Order_Details_Cash.TESTID as 'Test ID' , 
     testname  as 'Test Name'  , 
     dept_name as 'Section Name' ,
     departments.Dept_id as 'dept id',
     sample_kind.Desc_Sample_kind as 'Sample Kind',
     Coalesce(Lab_Packages.packageid,0)as 'package id'     
FROM Order_Details_Cash
inner join LabTests on Order_Details_cash.TESTID = LabTests.TestId
inner join Sample_Kind on LabTests.ID_sample = sample_kind.ID_sample
inner join Departments on LabTests.Dept_id = Departments.Dept_id
inner join Lab_orders_Cash on Lab_orders_Cash.cash_order_id = 
Order_Details_Cash.CASH_ORDER_ID
left join Lab_Packages on Order_Details_Cash.TESTID = Lab_Packages.packageid
where CONVERT(varchar,[Order_Details_Cash].CASH_ORDER_ID) = 2000000805
and Lab_orders_Cash.order_status = 1
  

Ответ №2:

Как сказал Далек, используйте

Функция объединения (Lab_Packages.packageid,0) в качестве идентификатора пакета
Функция объединения заменит нулевое значение на значение, которое вы ввели, которое в моем случае равно 0.

это правильный ответ:

 select distinct Order_Details_Cash.TESTID as 'Test ID' , 
       testname  as 'Test Name'  , 
       dept_name as 'Section Name' ,
       departments.Dept_id as 'dept id',
       sample_kind.Desc_Sample_kind as 'Sample Kind',
       Coalesce(Lab_Packages.packageid,0)as 'package id'  
FROM Order_Details_Cash
inner join LabTests on Order_Details_cash.TESTID = LabTests.TestId
inner join Sample_Kind on LabTests.ID_sample = sample_kind.ID_sample
inner join Departments on LabTests.Dept_id = Departments.Dept_id
inner join Lab_orders_Cash on Lab_orders_Cash.cash_order_id = Order_Details_Cash.CASH_ORDER_ID
left join Lab_Packages on Order_Details_Cash.TESTID = Lab_Packages.packageid
where CONVERT(varchar,[Order_Details_Cash].CASH_ORDER_ID) = 2000000805
and Lab_orders_Cash.order_status = 1