当重复值时,sql server在select中返回null

时间:2011-08-09 15:11:45

标签: sql-server select

我有一个查询返回带有操作日期的用户操作,但是,我希望我的查询返回带有日期的所有操作,但是当日期等于上一个日期时,操作日期返回null,例如

action                date
gone shopping         10/1/2011
swimming              10/1/2011
riding                11/1/2011

so i want my select to return rows like this
action                date
gone shopping         10/1/2011
swimming              NULL
riding                11/1/2011

有人有想法实现这个吗?

3 个答案:

答案 0 :(得分:2)

据推测,这是因为您希望如何显示数据?

在这种情况下,请在用户界面代码中执行此操作,而不是在SQL查询中执行此操作。可以使用PARTITIONORDER BY,但最终会得到一个非常复杂的SQL查询。

答案 1 :(得分:1)

这听起来像是你希望在应用层而不是数据库层处理这种美学逻辑的情况。

如果您更改记录的顺序,或者下游添加了GROUP BY之类的其他逻辑,则可能会导致问题。

无理由删除数据通常是个坏主意。对于消耗下游数据的任何其他进程,您将有效地将actiondate解耦。

答案 2 :(得分:0)

declare @T table
(
  [action] varchar(20),
  [date] date
)

insert into @T
select 'gone shopping', '10/1/2011' union all
select 'swimming',      '10/1/2011' union all
select 'riding',        '11/1/2011'

;with cte as
(
  select [action],
         [date],
         row_number() over(order by [date], [action]) as rn
  from @T
)
select C1.[action],
       case when C2.[date] is null
         then C1.[date]
       end as [date]   
from cte as C1
  left outer join cte as C2
    on C1.rn = C2.rn + 1 and
       C1.[date] = C2.[date]
order by C1.rn