Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 10g的Sql查询需要澄清_Sql_Group By - Fatal编程技术网

Oracle 10g的Sql查询需要澄清

Oracle 10g的Sql查询需要澄清,sql,group-by,Sql,Group By,我有一个名为sites的表,其中有多条相同名称的记录。例如: Owner Name Owner Address A XYZ A ABC B QWE B

我有一个名为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

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

您没有提到您使用的数据库系统(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这样的单个记录不应该有任何序列。