Sql 将列值隐藏在第一个

Sql 将列值隐藏在第一个,sql,sql-server,tsql,Sql,Sql Server,Tsql,假设我有一个表,即company,有Emp\u name、salary和department\u name列 Emp_name salary Dept_name AAAA 40000 production HHHH 50000 Developer DDDD 40000 production EEEE 45000 sales BBBB

假设我有一个表,即company,有Emp\u name、salary和department\u name列

Emp_name       salary       Dept_name
AAAA           40000        production
HHHH           50000        Developer
DDDD           40000        production
EEEE           45000        sales
BBBB           42000        production
FFFF           46000        sales
CCCC           41000        production
GGGG           49000        Developer
我希望表中的所有数据按部门列出,我希望如下所示:

Emp_name       salary       Dept_name
AAAA           40000        production
BBBB           42000
CCCC           41000 
DDDD           40000
EEEE           45000        sales
FFFF           46000 
GGGG           49000        Developer
HHHH           50000     

我建议只对行进行排序:

select emp_name, salary, dept_name
from t
order by min(emp_name) over (partition by dept_name),
         dept_name,
         emp_name;
但是,您似乎希望每个分组的第一行都有员工姓名。这种类型的转换通常在应用程序层处理。但您可以在SQL中执行此操作:

select emp_name, salary,
       (case when row_number() over (partition by dept_name order by emp_name) = 1
             then dept_name
        end) as dept_name
from t
order by min(emp_name) over (partition by dept_name),
         dept_name,
         emp_name;

请解释订购。根据问题指南,请说明您尝试了什么,并告诉我们您(在本网站或其他地方)发现了什么,以及为什么它不能满足您的需求。这是一个显示问题,您通常在前端会这样做。添加一个id(int-identity(1,1))列可能是一个好主意,万一你在同一个部门有两个同名的员工。。。