0

我有一个名为 sites 的表,其中有多个同名记录。例如:

     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

有人可以给我写这样一个查询的指针吗?我在对具有相同所有者名称的记录进行分组时遇到问题,然后每次都为不同的所有者名称应用序列。

4

3 回答 3

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

结果集

在此处输入图像描述

于 2012-08-04T10:43:28.560 回答
0
SELECT OwnerName + Convert(NVARCHAR(10), ROW_NUMBER() OVER (PARTITION BY OwnerName ORDER BY OwnerName)),
       OwnerAddress
FROM   dbo.OwnerTable
于 2012-08-04T10:34:33.493 回答
0

您没有提到您正在使用什么数据库系统(SQL = 结构化查询语言 - 这是一种查询语言 - 不是数据库系统....) - 但如果您使用的是 SQL Server 2005 或更新版本或任何其他 RDBMS支持 CTE(公用表表达式)和ROW_NUMBER函数,您可以使用:

;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

作为输出返回:

在此处输入图像描述

于 2012-08-04T10:27:51.553 回答