Oracle 10g的Sql查询需要澄清
我有一个名为sites的表,其中有多条相同名称的记录。例如:Oracle 10g的Sql查询需要澄清,sql,group-by,Sql,Group By,我有一个名为sites的表,其中有多条相同名称的记录。例如: Owner Name Owner Address A XYZ A ABC B QWE B
Owner Name Owner Address
A XYZ
A ABC
B QWE
B JKL
C ZXC
B BNM
我的sql查询应该返回
A1 XYZ
A2 ABC
B1 QWE
B2 JKL
B3 BNM
C ZXC
有人能给我写这样一个查询的指针吗?我对使用相同所有者名称的记录进行分组,然后每次为不同的所有者名称应用序列时遇到问题。您没有提到您使用的数据库系统(SQL=结构化查询语言-这是一种查询语言-不是数据库系统…)-但是,如果您使用的是SQL Server 2005或更新版本,或者任何其他支持CTE(通用表表达式)和
行号
功能的RDBMS,则可以使用:
;WITH data AS
(
SELECT OwnerName, OwnerAddress,
RN = ROW_NUMBER() OVER(PARTITION BY OwnerName ORDER BY OwnerAddress)
FROM dbo.YourTable
)
SELECT
OwnerName + CAST(RN AS CHAR(1)), OwnerAddress
FROM Data
作为输出返回:
SELECT OwnerName + Convert(NVARCHAR(10), ROW_NUMBER() OVER (PARTITION BY OwnerName ORDER BY OwnerName)),
OwnerAddress
FROM dbo.OwnerTable
尝试以下方法:如果您使用的是SQL server 2005或更高版本
;with cte as (select *,ROW_NUMBER() over(partition by Owner_Name
order by Owner_Address desc) as row_num from sites),
cte1 as(select Owner_Name
from cte
group by Owner_Name
having COUNT(*)>1)
select case when C.Owner_Name in (select Owner_Name from cte1)
then Owner_Name+CAST(row_num as varchar(10))
else Owner_Name end as Owner_Name,Owner_Address
from cte C
order by Owner_Name
结果集
您使用的是哪种数据库引擎sql server或mysql?@JoeGJoseph,除此之外还有几个选项:-)。/C为什么不也获取一个数字?我使用的是oracle。像C这样的单个记录不应该有任何序列。