Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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
SQL添加一个额外的列,该列统计特定列的重复值_Sql_Sql Server 2008 R2_Count_Distinct - Fatal编程技术网

SQL添加一个额外的列,该列统计特定列的重复值

SQL添加一个额外的列,该列统计特定列的重复值,sql,sql-server-2008-r2,count,distinct,Sql,Sql Server 2008 R2,Count,Distinct,我好像休息了一天,似乎无法让这个查询正常工作 STAT SHNO UPDD UPDT ORDERNO 30 SHN124 20141022 150048 40303021 30 SHN125 20141022 150048 40303021 40 SHN123 20141022 150048 403

我好像休息了一天,似乎无法让这个查询正常工作

STAT         SHNO         UPDD        UPDT      ORDERNO
30         SHN124       20141022      150048      40303021
30         SHN125       20141022      150048      40303021
40         SHN123       20141022      150048      40303020
最初,我不使用DISTINCT的查询包括重复两行:

STAT       SHNO      UPDD         UPDT       ORDERNO 
40       ASN123    20141022   150048       40303020
30       ASN124    20141022   150048       40303021
30       ASN124    20141022   150048       40303021
40       ASN123    20141022   150048       40303020
30       ASN125    20141022   150048       40303021
STAT         SHNO         UPDD        UPDT      ORDERNO
30         SHN124       20141022      150048      40303021
30         SHN125       20141022      150048      40303021
40         SHN123       20141022      150048      40303020
我将查询更改为包含不同的:

SELECT DISTINCT  
    STAT, SHNO, UPDD, UPDT, ORDERNO
FROM   
    BLUEWATER                                  
STAT         SHNO         UPDD        UPDT      ORDERNO
30         SHN124       20141022      150048      40303021
30         SHN125       20141022      150048      40303021
40         SHN123       20141022      150048      40303020
现在我得到了想要的结果集:

STAT         SHNO         UPDD        UPDT      ORDERNO
30         SHN124       20141022      150048      40303021
30         SHN125       20141022      150048      40303021
40         SHN123       20141022      150048      40303020
但是,我尝试使用COUNT在结果中生成一列,对ORDERNO不唯一的行进行计数,并希望获得以下结果:

STAT         SHNO         UPDD        UPDT      ORDERNO
30         SHN124       20141022      150048      40303021
30         SHN125       20141022      150048      40303021
40         SHN123       20141022      150048      40303020
STAT         SHNO         UPDD        UPDT      ORDERNO      ORDERNOCOUNT     
30         SHN124       20141022      150048    40303021      2                
30         SHN125       20141022      150048    40303021      2                
40         SHN123       20141022      150048    40303020      1                

我只需要使用group by和COUNT()就可以了。。。你用的是什么版本

STAT         SHNO         UPDD        UPDT      ORDERNO
30         SHN124       20141022      150048      40303021
30         SHN125       20141022      150048      40303021
40         SHN123       20141022      150048      40303020
SELECT STAT, SHNO, UPDD, UPDT, ORDERNO, 
       COUNT(*) OVER (PARTITION BY ORDERNO) AS ORDERNOCOUNT
FROM BLUEWATER     
GROUP BY STAT, SHNO, UPDD, UPDT, ORDERNO
作为子选择

STAT         SHNO         UPDD        UPDT      ORDERNO
30         SHN124       20141022      150048      40303021
30         SHN125       20141022      150048      40303021
40         SHN123       20141022      150048      40303020
SELECT gsub.STAT, gsub.SHNO, gsub.UPDD, gsub.UPDT, gsub.ORDERNO, sub.c AS ORDERNOCOUNT
FROM 
(
   SELECT STAT, SHNO, UPDD, UPDT, ORDERNO
   FROM BLUEWATER
   GROUP BY STAT, SHNO, UPDD, UPDT, ORDERNO
) gsub
JOIN (
   SELECT ORDERNO, COUNT(*) as c
   FROM BLUEWATER
   GROUP BY ORDERNO
) as sub ON gsub.ORDERNO = sub.ORDERNO

对于前两个结果,你会得到1而不是2,因为
SHNO
changes…似乎更适合使用
COUNT(*)OVER(partitionbyorderno)
但是,由于OP没有提到他们使用的版本…谢谢@Aaron。我使用的是SQL Server 2008版本10.50.1617,但我将把查询移植到运行在iseries上的DB2AS400@TobyDerrum:v10.50是SQL Server 2008 R2(与2008不同)@tobydrrum——DB2也有很多版本。但是,如果你使用9.7或之后,你应该是罚款。它将支持COUNT…OVERPlease标记和您正在使用的SQL Server版本,因此我们不必猜测。此外,您首先需要
DISTINCT
,这一事实表明底层设计存在一个基本问题。(因为这些神秘的列名——谁给它们命名的?——我们很难猜出设计问题是什么。)这些名字对我来说也很神秘,我收到了一份电子表格,其中只描述了一些列,尽管我不需要全部。我没有客户端访问权限,也不认为总是通过VPN连接是切实可行的,所以我在SQLServerR2中重新创建了DB2表。谢谢你的帮助!