我有一个findhighest_secondstep这样的数据表:
id department top_employee highest_salary rownumber1
-----------------------------------------------------------
5 Finance Shane 6300 1
10 Finance Laura 6300 1
7 HR Vik 7200 1
3 IT Kate 7500 1
14 Marketing Elice 6800 1
6 Sales Shed 8000 1
Run Code Online (Sandbox Code Playgroud)
我想返回一个包含列部门,top_employee和highest_salary的表,而我知道在财务部门,我们有两个人的工资相同。所以我想展示所有这些。
SELECT
hs.department AS department,
top_employee = STUFF((SELECT ', ' + top_employee
FROM findhighest_secondstep
FOR XML PATH('')), 1, 1, '')
FROM
findhighest_secondstep hs
GROUP BY
hs.department
Run Code Online (Sandbox Code Playgroud)
这就是我得到的:
department top_employee
--------------------------------------------------
Finance Shane, Laura, Vik, Kate, Elice, Shed
HR Shane, Laura, Vik, …Run Code Online (Sandbox Code Playgroud) 我们需要编写一个 SQL 查询来删除名为 的表中的所有重复电子邮件条目Person,仅根据其最小 ID 保留唯一的电子邮件。
+----+------------------+
| Id | Email |
+----+------------------+
| 1 | john@example.com |
| 2 | bob@example.com |
| 3 | john@example.com |
+----+------------------+
Run Code Online (Sandbox Code Playgroud)
Id是该表的主键列。
例如,运行查询后,上Person表应具有以下行:
+----+------------------+
| Id | Email |
+----+------------------+
| 1 | john@example.com |
| 2 | bob@example.com |
+----+------------------+
Run Code Online (Sandbox Code Playgroud)
注意:执行SQL后输出的是整个Person表。需要使用delete语句。
这是我的答案:
delete Person
from Person p
left join
(select Id, Email
from
(select
Id, Email,
ROW_NUMBER() OVER(PARTITION BY Email ORDER BY Id) AS row_num
from …Run Code Online (Sandbox Code Playgroud) 我有表A:
id
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
和表B:
id
2
3
4
Run Code Online (Sandbox Code Playgroud)
我离开了加入 A 和 B:
id id
1 NULL
2 2
3 3
4 4
5 NULL
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得这样的新专栏:
id id flag
1 NULL 0
2 2 1
3 3 1
4 4 1
5 NULL 0
Run Code Online (Sandbox Code Playgroud)
Generally speaking, I want all rows in A but not in B to be flaged as 0 and want all rows in both tables to be flaged as 1. How can I achieve …