我有一张如下所述的表格:
-------------------------------
EmpID | Name | Salary
-------------------------------
1 | AAA | 10000
2 | BBB | 10000
3 | CCC | 15000
4 | DDD | 15000
5 | EEE | 20000
--------------------------------
我想编写一个SQL查询来对表值进行分组,如下所述:
---------------------
Salary | Name
---------------------
10000 | AAA
| BBB
15000 | CCC
| DDD
20000 | EEE
---------------------
帮助我在sql server中使用sql查询实现输出。
答案 0 :(得分:1)
不完全是您想要的,但您可以在一列中列出所有名称,如下所示:
Salary | Name
---------------------
10000 | AAA, BBB
15000 | CCC, DDD
20000 | EEE
以下基于this answer的查询应该给出以上结果:
SELECT Salary, STUFF(( SELECT ', ' + Name FROM Employees a
WHERE b.Salary = a.Salary FOR XML PATH('')), 1, 1, '') Name
FROM Employees b
GROUP BY Salary;
答案 1 :(得分:1)
您的请求通常必须在Excel或其他类似软件下运行,但......
我模仿GROUP BY
行为,因此您只会获得工资值的行,而另一行的工资相同且值为NULL:
create table salary(empid int, name varchar(10), wage int);
insert into salary values
(1, 'AAA', 10000),
(2, 'BBB', 10000),
(3, 'CCC', 15000),
(4, 'DDD', 15000),
(5, 'EEE', 20000);
SELECT s1.name,
CASE
WHEN NOT EXISTS(
SELECT 'X'
FROM salary s3
WHERE s3.empid < s1.empid
AND s3.wage = s1.wage
)
THEN
(SELECT wage FROM salary s2
WHERE s2.name = s1.name)
ELSE NULL
END
FROM salary s1
ORDER BY wage
SELECT
获取所有员工,并且对于工资组的第一个员工ID,它显示工资else显示为NULL。
这不是你想要的,但它确实是相似的