Sql 如何仅从每个部门选择一个记录或第一个测试名称?
如何仅从每个部门选择第一个测试名称,现在选择显示每个部门中的所有测试名称,但我只需要第一个测试名称,每个部门仅需要一行。这是SELECT语句:Sql 如何仅从每个部门选择一个记录或第一个测试名称?,sql,sql-server,tsql,Sql,Sql Server,Tsql,如何仅从每个部门选择第一个测试名称,现在选择显示每个部门中的所有测试名称,但我只需要第一个测试名称,每个部门仅需要一行。这是SELECT语句: SELECT distinct departments.dept_name, coalesce(groups.groupdesc,labtests.testname) AS 'Test Name', LAB_RESULTS.order_id , lab_results.patient_no , Patients.Age a
SELECT distinct departments.dept_name,
coalesce(groups.groupdesc,labtests.testname) AS 'Test Name',
LAB_RESULTS.order_id ,
lab_results.patient_no ,
Patients.Age as 'Age',
case gender when 2 then 'Male' when 3 then 'Female' end as Gender
FROM lab_results
inner join patients on lab_results.patient_no = patients.patient_no
inner join labtests on lab_results.testid = labtests.testid
inner join customers on lab_results.custid = customers.custid
inner join Departments on lab_results.deptid = departments.dept_id
inner join Lab_Sample_status on LAB_RESULTS.SAMPLE_STATUS = [Lab_Sample_status].status_id
inner join lab_orders on lab_results.order_id = lab_orders.order_id
left join groups on lab_results.testid = groups.testid
WHERE lab_results.sample_status in (4,5)
and lab_results.order_id=2000000302
order by Departments.Dept_name
输出:
dept_name Test Name order_id patient_no Age Gender
Clinical Chemistry Unit Albumin 2000000302 11 45 Male
Clinical Chemistry Unit Calcium 2000000302 11 45 Male
Clinical Chemistry Unit Glucose Fasting (FBS) 2000000302 11 45 Male
Clinical Chemistry Unit Iron (Fe) 2000000302 11 45 Male
Clinical Chemistry Unit KIDNEY FUNCTION TEST 2000000302 11 45 Male
Clinical Chemistry Unit LIPID PROFILE 2000000302 11 45 Male
Clinical Chemistry Unit LIVER FUNCTION TEST 2000000302 11 45 Male
Hematology Unit CBC WITH DIFFERENTIAL COUNT 2000000302 11 45 Male
Hematology Unit Erythrocyte Sedimentation Rate (ESR) 2000000302 11 45 Male
Hormones Unit Free T4 (FT4) 2000000302 11 45 Male
Hormones Unit Glycated Haemoglobin (HbA1c) 2000000302 11 45 Male
Hormones Unit Thyroid Stimulating Hormone (TSH) 2000000302 11 45 Male
Hormones Unit Vitamin B12 2000000302 11 45 Male
Hormones Unit Vitamin D Total 2000000302 11 45 Male
Parasitology URINE ANALYSIS 2000000302 11 45 Male
Serology Unit Helicobacter Pylori Abs in blood 2000000302 11 45 Male
当我删除testname列时
coalesce(groups.groupdesc,labtests.testname) AS 'Test Name'
它工作正常,每个部门有一行,但我需要测试名称,并在每个部门中只选择第一个测试名称,如下输出:
Clinical Chemistry Unit Albumin 2000000302 11 45 Male
Hematology Unit CBC WITH DIFFERENTIAL COUNT 2000000302 11 45 Male
Hormones Unit Free T4 (FT4) 2000000302 11 45 Male
Parasitology URINE ANALYSIS 2000000302 11 45 Male
Serology Unit Helicobacter Pylori Abs in blood 2000000302 11 45 Male
如何执行此操作?以下基于订单ID和部门的查询列表结果
select dept_name, [Test Name], order_id, patient_no, [Age], Gender
from (
SELECT departments.dept_name,
coalesce(groups.groupdesc,labtests.testname) AS 'Test Name',
LAB_RESULTS.order_id ,
lab_results.patient_no ,
Patients.Age as 'Age',
case gender when 2 then 'Male' when 3 then 'Female' end as Gender,
Row_number()over(Partition by departments.dept_name, LAB_RESULTS.order_id order by departments.dept_name, coalesce(groups.groupdesc,labtests.testname)) rno
FROM lab_results
inner join patients on lab_results.patient_no = patients.patient_no
inner join labtests on lab_results.testid = labtests.testid
inner join customers on lab_results.custid = customers.custid
inner join Departments on lab_results.deptid = departments.dept_id
inner join Lab_Sample_status on LAB_RESULTS.SAMPLE_STATUS = [Lab_Sample_status].status_id
inner join lab_orders on lab_results.order_id = lab_orders.order_id
left join groups on lab_results.testid = groups.testid
WHERE lab_results.sample_status in (4,5)
and lab_results.order_id=2000000302
)a where rno=1
order by dept_name
下面是基于orderid和department的查询列表结果
select dept_name, [Test Name], order_id, patient_no, [Age], Gender
from (
SELECT departments.dept_name,
coalesce(groups.groupdesc,labtests.testname) AS 'Test Name',
LAB_RESULTS.order_id ,
lab_results.patient_no ,
Patients.Age as 'Age',
case gender when 2 then 'Male' when 3 then 'Female' end as Gender,
Row_number()over(Partition by departments.dept_name, LAB_RESULTS.order_id order by departments.dept_name, coalesce(groups.groupdesc,labtests.testname)) rno
FROM lab_results
inner join patients on lab_results.patient_no = patients.patient_no
inner join labtests on lab_results.testid = labtests.testid
inner join customers on lab_results.custid = customers.custid
inner join Departments on lab_results.deptid = departments.dept_id
inner join Lab_Sample_status on LAB_RESULTS.SAMPLE_STATUS = [Lab_Sample_status].status_id
inner join lab_orders on lab_results.order_id = lab_orders.order_id
left join groups on lab_results.testid = groups.testid
WHERE lab_results.sample_status in (4,5)
and lab_results.order_id=2000000302
)a where rno=1
order by dept_name
删除条件和实验室结果时的另一件事。订单id=200000302并选择所有订单。它不会带来所有订单,并且只从每个订单中带来一行?是的,它只会为所有部门带来一行,且rno=1条件。我在Row_number功能中使用了departments.dept_name分区,如果我需要在lab_results中选择所有订单id,而不是仅选择一个没有此条件和lab_results的订单,请添加答案。order_id=200000302,并为每个订单id为每个部门显示一行?删除条件和实验室结果。订单id=200000302,并选择所有订单。不带所有订单,仅从每个订单中带一行?是,在rno=1条件下,仅为所有部门带一行。我在Row_number功能中使用了departments.dept_name分区,如果我需要在lab_results中选择所有order_id,而不是仅选择一个没有此条件和lab_results的订单,请添加答案。order_id=200000302,并为每个order_id为每个部门显示一行?如何定义第一个测试?如何定义第一个测试?