小编Viv*_*ang的帖子

SQL Server使用FOR XML PATH按组连接多行

我有一个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 sql-server

4
推荐指数
1
解决办法
81
查看次数

删除重复的电子邮件记录

我们需要编写一个 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)

sql sql-server sql-delete

0
推荐指数
1
解决办法
1535
查看次数

如何使用新列作为标志来显示空行?

我有表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 …

sql sql-server join left-join

-1
推荐指数
1
解决办法
55
查看次数

标签 统计

sql ×3

sql-server ×3

join ×1

left-join ×1

sql-delete ×1