2012-08-04 75 views
0

我有一个名为site的表,其中有多个相同名称的记录。对于例如:在Oracle 10g的Sql查询中需要说明

 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 

可能有人给我指点写这样的query.I时遇到问题分组记录有相同的所有者名称,然后每次申请序列为不同的所有者名称。

+1

您正在使用SQL Server或MySQL的数据库引擎? – 2012-08-04 10:16:22

+0

@JoeGJoseph,还有其他几个选项: - )./ – Ben 2012-08-04 10:27:42

+0

为什么'C'没有得到一个数字呢? – 2012-08-04 11:30:00

回答

0

你没有提及你正在使用的数据库系统(SQL =结构化查询语言 - 这是一种查询语言 - 不是数据库系统....) - 但如果你使用的是SQL Server 2005或更新或支持的CTE(公共表表达式)和ROW_NUMBER功能的任何其它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 

返回的输出:

enter image description here

0
SELECT OwnerName + Convert(NVARCHAR(10), ROW_NUMBER() OVER (PARTITION BY OwnerName ORDER BY OwnerName)), 
     OwnerAddress 
FROM dbo.OwnerTable 
0

试试这个:如果您在使用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 

结果集

enter image description here