【问题标题】:Remove repeating column values during an Inner Join Sql Server在 Inner Join Sql Server 期间删除重复的列值
【发布时间】:2015-07-17 07:52:43
【问题描述】:

我有两张桌子

表 1

EmployeeId  EmployeeName
    1            A

表 2

EmployeeId  Month
    1        Jan
    1        Feb
    1        Mar
    1        Apr

当我根据employeeid 应用inner join 时,我会得到这样的结果

EmployeeId  EmployeeName    Month
    1            A           Jan
    1            A           Feb
    1            A           Mar
    1            A           Apr

我想从表 1 中删除所有重复的列值。我的结果应该是这样的。

EmployeeId  EmployeeName    Month
    1            A           Jan
                             Feb
                             Mar
                             Apr

请就此提出任何想法。

【问题讨论】:

  • 所以你想用NULL替换实际值?
  • 用 Null 或空字符串替换实际值

标签: sql sql-server sql-server-2008-r2 sql-server-2012


【解决方案1】:

这样就可以了:

WITH CTE AS
(
  SELECT t1.EmployeeId AS t1EmployeeID, t1.EmployeeName,
         t2.EmployeeId AS t2EmployeeID, Month,
         RN = ROW_NUMBER() OVER (Partition BY t1.EmployeeId 
                                 ORDER BY MONTH(t2.Month + ' 1 2015'))
  FROM Table2 t2
  LEFT OUTER JOIN Table1 t1
  ON t1.EmployeeID = t2.EmployeeID
)
SELECT EmployeeId = CASE WHEN RN = 1 
                    THEN t1EmployeeID ELSE NULL END,
       EmployeeName = CASE WHEN RN = 1 
                    THEN EmployeeName ELSE NULL END, 
       Month
FROM CTE

棘手的部分是从缩写月份名称按 int-month 排序。

Demo

【讨论】:

  • 非常感谢 Tim Schmeleter。它减少了我的很多努力。
猜你喜欢
  • 2012-07-24
  • 2019-08-10
  • 1970-01-01
  • 1970-01-01
  • 2012-10-02
  • 2012-04-07
  • 2013-05-05
  • 1970-01-01
相关资源
最近更新 更多