在名为City
的专栏中,有10多行具有相同的城市,每行显示相同的城市名称。我想要的是在ORDER BY CITY
之后,我应该获得该城市的第一行的城市名称,然后下一行应显示CITY="-"
或NULL
值以表明详细信息是同一个城市。
尝试:我已经尝试了很多次来解决这个问题。
我用过这个,但输出给了我任何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'
获得使用PIVOT
的建议。但是经过研究并没有得到太多的结果,给出了用cols交换行的例子,而不是这些问题。
大量在线删除重复行的示例,但很少用其他值替换重复值(此处为--
)。尝试使用临时表,但语法错误杀了我,仍然在努力。
由于我有21个不同的城市,我需要找到所有城市的副本,并在不改变其他行细节的情况下替换每个城市的城市名称。作为一个新手,我不知道如何实现这一点。有人可以帮我或指点我参考吗?
答案 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())执行类似的操作。