【问题标题】:Keep repeating values from left table blank in sql left join在sql左连接中保持左表空白的重复值
【发布时间】:2021-09-03 19:56:49
【问题描述】:

表 1

EmployeeId Employee Name
1 Employee1
2 Employee2

表2

EmployeeId Leave Date
1 01/08/2021
2 01/08/2021
1 02/08/2021
3 03/08/2021
1 04/08/2021
2 05/08/2021

我尝试过像这样加入表格

select EmployeeId, LeaveDate from 
Table1
JOIN table 2 on table1.EmplaoyeeId = table2.EmployeeId
order by EmployeeId

但是得到这样的输出

EmployeeId LeaveDate
1 01/08/2021
1 02/08/2021
1 04/08/2021
2 05/08/2021
2 01/08/2021
3 03/08/2021

想要的结果

EmployeeId LeaveDate
1 01/08/2021
02/08/2021
04/08/2021
2 01/08/2021
05/08/2021
3 03/08/2021

我需要打印一次左表数据,其余匹配的行应该为空。

【问题讨论】:

  • 不要在 SQL 中这样做。在你的程序逻辑中这样做
  • 我和 juergen d 在这里。这是你不应该在 SQL 中做的事情。虽然这是可能的,甚至很简单(使用LAGCASE WHEN),但应在您的应用程序中处理显示问题。 SQL 旨在为您提供数据。并且休假日期 02/08/2021 属于员工 1,而不是员工 NULL。
  • 您应该在网站代码的报告结构中更改此内容,而不是在 sql 上实现
  • 请仅标记您正在使用的 DBMS。它是 SQL Server 还是 SQLite?附带说明:该查询中不需要 tale1 。所需的所有数据都在表 2 中。
  • @ThorstenKettner 能否请您简要解释一下我如何在应用程序端实现?遍历所有行并手动擦除值将花费更多时间

标签: sql


【解决方案1】:

我认为您无法通过单个查询来实现这一目标,但这应该适合您

;WITH CTE
AS(
select 
    RN = ROW_NUMBER() OVER(PARTITION BY EmployeeId ORDER BY EmployeeId,LeaveDate),
    EmployeeId, 
    LeaveDate 
    from Table1
        JOIN Table2 
            on table1.EmplaoyeeId = table2.EmployeeId
)
SELECT  
    EmployeeId = CASE RN 
                    WHEN 1 THEN EmployeeId END, 
    LeaveDate 
    FROM CTE
        ORDER BY 
            EmployeeId,RN

【讨论】:

  • is 单个查询 :-) 如果您引用没有子查询的查询,那么只需在 ROW_NUMBER 上直接应用 CASE WHEN 即可实现此目的.
【解决方案2】:

为了您想要的结果,您不需要join,所以我将其删除。不过,这并不影响答案。您只需要使用row_number() 并确保最终的order byrow_number() 中的order by 匹配:

select (case when row_number() over (partition by t2.EmployeeId order by t2.LeaveDate) = 1
             then t2.EmployeeId
        end) as EmployeeId,
       t2.LeaveDate
from table2 t2
order by t2.EmployeeId, t2.LeaveDate;

请注意,这种类型的操作通常在表示层而不是在数据库中处理。

【讨论】:

    猜你喜欢
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 2014-07-29
    • 2017-07-02
    相关资源
    最近更新 更多