#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