Sql 如何仅从每个部门选择一个记录或第一个测试名称?

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语句:

  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为每个部门显示一行?如何定义第一个测试?如何定义第一个测试?