sql从表中删除CELL DATA / RECORD

时间:2012-08-09 13:23:39

标签: sql

在名为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的建议。但是经过研究并没有得到太多的结果,给出了用cols交换行的例子,而不是这些问题。

  3. 大量在线删除重复行的示例,但很少用其他值替换重复值(此处为--)。尝试使用临时表,但语法错误杀了我,仍然在努力。

  4. 由于我有21个不同的城市,我需要找到所有城市的副本,并在不改变其他行细节的情况下替换每个城市的城市名称。作为一个新手,我不知道如何实现这一点。有人可以帮我或指点我参考吗?

1 个答案:

答案 0 :(得分:0)

首先,您不想更改原始数据。最起码,我是这么想的。表本质上没有排序,因此没有“第一”的概念。

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

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())执行类似的操作。