0

在我的专栏City中,有 10 多行具有相同的城市,每行显示相同的城市名称。我想要的是之后ORDER BY CITY,我应该获得具有该城市的第一行的城市名称,然后下一行应该显示CITY="-"NULL值以指示详细信息属于同一城市。

尝试:我尝试了很多周来解决这个问题。

  1. 我使用了这个,但输出给了我任何ZONES(citynames). 但是,要选择显示重复城市名称的那些行,在此排序之后将变得不可能。

    WITH T1 AS
    (SELECT *
    FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY ZONE ORDER BY Date ASC) AS ROWID 
          FROM Try2)T
    WHERE T.ROWID > 1)
    UPDATE T1 SET ZONE='NULL'
    
  2. 得到了使用的建议PIVOT。但学习后并没有得到太多,pivot例子给出了用cols交换行,而不是这样的问题。

  3. 网上有很多删除重复行的例子,但是用其他值替换重复值的例子很少(这里--)。也尝试使用临时表,但语法错误杀死了我,仍在处理它。

由于我有 21 个不同的城市,我需要找到所有城市的重复项,并在每个城市中替换城市名称,而不更改其他行详细信息。作为一个新手,我不知道如何实现这一点。任何人都可以帮助我或指出我的参考吗?

4

1 回答 1

0

首先,您不想更改原始数据。至少在我看来。一个表本质上是无序的,所以没有“第一”的概念。

相反,请在获取数据时执行此操作。让我假设有一个名为“日期”的字段定义了第一个字段。

select (case when try2.date = tc.mindate then try2.city else '-' end) as city,
       <rest of the columns>
from try2 join
     (select city, min(date) as mindate
      from try2
      group by city
     ) tc
     on try2.city = tc.city 
order by city, date

您可以使用排名函数 (row_number()) 执行类似的操作。

于 2012-08-09T13:49:01.407 回答