Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.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/6/opengl/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
SQL删除一列上的重复项,然后聚合另一列上的重复项,而不使用;分区;关键词_Sql_Db2_Filtering - Fatal编程技术网

SQL删除一列上的重复项,然后聚合另一列上的重复项,而不使用;分区;关键词

SQL删除一列上的重复项,然后聚合另一列上的重复项,而不使用;分区;关键词,sql,db2,filtering,Sql,Db2,Filtering,使用以下查询: SELECT STAT, SHNO, ORDERNO FROM BLUEWATER ORDER BY SHNO; STAT SHNO ORDERNO 40 ASN123 40303

使用以下查询:

SELECT STAT, SHNO, ORDERNO FROM  BLUEWATER ORDER BY SHNO; 
STAT      SHNO     ORDERNO                                                                                                                                     
40      ASN123   40303020                                                                                                                                    
40      ASN123   40303020                                                                                                                                    
30      ASN124   40303021                                                                                                                                    
30      ASN124   40303021                                                                                                                                    
30      ASN125   40303021    
STAT      SHNO     ORDERNO  ORDERNOTOTAL                                                                                                                    
40      ASN123   40303020    1                                                                                                                               
30      ASN124   40303021    2                                                                                                                               
30      ASN125   40303021    2     
我可以得到以下信息:

STAT      SHNO     ORDERNO                                                                                                                                     
40      ASN123   40303020                                                                                                                                    
40      ASN123   40303020                                                                                                                                    
30      ASN124   40303021                                                                                                                                    
30      ASN124   40303021                                                                                                                                    
30      ASN125   40303021    
STAT      SHNO     ORDERNO  ORDERNOTOTAL                                                                                                                    
40      ASN123   40303020    1                                                                                                                               
30      ASN124   40303021    2                                                                                                                               
30      ASN125   40303021    2     
我正在寻找一个查询,该查询将消除重复的SHNO行,然后创建第四列,该列是ORDERNO重复次数的总和(该总数是在消除SHNO重复之后计算的)

STAT      SHNO     ORDERNO                                                                                                                                     
40      ASN123   40303020                                                                                                                                    
40      ASN123   40303020                                                                                                                                    
30      ASN124   40303021                                                                                                                                    
30      ASN124   40303021                                                                                                                                    
30      ASN125   40303021    
STAT      SHNO     ORDERNO  ORDERNOTOTAL                                                                                                                    
40      ASN123   40303020    1                                                                                                                               
30      ASN124   40303021    2                                                                                                                               
30      ASN125   40303021    2     
目标数据库是DB2。我目前不知道是什么版本,但会设法确定这一点,尽管我假设不是最新版本

STAT      SHNO     ORDERNO                                                                                                                                     
40      ASN123   40303020                                                                                                                                    
40      ASN123   40303020                                                                                                                                    
30      ASN124   40303021                                                                                                                                    
30      ASN124   40303021                                                                                                                                    
30      ASN125   40303021    
STAT      SHNO     ORDERNO  ORDERNOTOTAL                                                                                                                    
40      ASN123   40303020    1                                                                                                                               
30      ASN124   40303021    2                                                                                                                               
30      ASN125   40303021    2     
我的目标是生成以下内容的查询:

STAT      SHNO     ORDERNO                                                                                                                                     
40      ASN123   40303020                                                                                                                                    
40      ASN123   40303020                                                                                                                                    
30      ASN124   40303021                                                                                                                                    
30      ASN124   40303021                                                                                                                                    
30      ASN125   40303021    
STAT      SHNO     ORDERNO  ORDERNOTOTAL                                                                                                                    
40      ASN123   40303020    1                                                                                                                               
30      ASN124   40303021    2                                                                                                                               
30      ASN125   40303021    2     

解决方案需要避免使用PARTITION关键字,因为这个版本的DB2不接受它

我不熟悉DB2,但以下内容适用于大多数SQL版本:

STAT      SHNO     ORDERNO                                                                                                                                     
40      ASN123   40303020                                                                                                                                    
40      ASN123   40303020                                                                                                                                    
30      ASN124   40303021                                                                                                                                    
30      ASN124   40303021                                                                                                                                    
30      ASN125   40303021    
STAT      SHNO     ORDERNO  ORDERNOTOTAL                                                                                                                    
40      ASN123   40303020    1                                                                                                                               
30      ASN124   40303021    2                                                                                                                               
30      ASN125   40303021    2     
SELECT STAT, SHNO, ORDERNO, count(1) OrderNoTotal
FROM  BLUEWATER 
GROUP BY STAT, SHNO, ORDERNO
ORDER BY SHNO;   

@约翰比万

STAT      SHNO     ORDERNO                                                                                                                                     
40      ASN123   40303020                                                                                                                                    
40      ASN123   40303020                                                                                                                                    
30      ASN124   40303021                                                                                                                                    
30      ASN124   40303021                                                                                                                                    
30      ASN125   40303021    
STAT      SHNO     ORDERNO  ORDERNOTOTAL                                                                                                                    
40      ASN123   40303020    1                                                                                                                               
30      ASN124   40303021    2                                                                                                                               
30      ASN125   40303021    2     
您的解决方案提供以下功能:

STAT      SHNO     ORDERNO                                                                                                                                     
40      ASN123   40303020                                                                                                                                    
40      ASN123   40303020                                                                                                                                    
30      ASN124   40303021                                                                                                                                    
30      ASN124   40303021                                                                                                                                    
30      ASN125   40303021    
STAT      SHNO     ORDERNO  ORDERNOTOTAL                                                                                                                    
40      ASN123   40303020    1                                                                                                                               
30      ASN124   40303021    2                                                                                                                               
30      ASN125   40303021    2     
STAT      SHNO     ORDERNO    ORDERNOTOTAL  
40     ASN123      40303020    2
30     ASN124      40303021    2
30     ASN125      40303021    1
鉴于我正在寻求:

STAT      SHNO     ORDERNO                                                                                                                                     
40      ASN123   40303020                                                                                                                                    
40      ASN123   40303020                                                                                                                                    
30      ASN124   40303021                                                                                                                                    
30      ASN124   40303021                                                                                                                                    
30      ASN125   40303021    
STAT      SHNO     ORDERNO  ORDERNOTOTAL                                                                                                                    
40      ASN123   40303020    1                                                                                                                               
30      ASN124   40303021    2                                                                                                                               
30      ASN125   40303021    2     
STAT      SHNO     ORDERNO    ORDERNOTOTAL  
40     ASN123      40303020    1
30     ASN124      40303021    2
30     ASN125      40303021    2
有两条记录具有40303021,因此在每个记录旁边是ORDERNOTOTAL中的值2

STAT      SHNO     ORDERNO                                                                                                                                     
40      ASN123   40303020                                                                                                                                    
40      ASN123   40303020                                                                                                                                    
30      ASN124   40303021                                                                                                                                    
30      ASN124   40303021                                                                                                                                    
30      ASN125   40303021    
STAT      SHNO     ORDERNO  ORDERNOTOTAL                                                                                                                    
40      ASN123   40303020    1                                                                                                                               
30      ASN124   40303021    2                                                                                                                               
30      ASN125   40303021    2     

根据上述评论进行更新

STAT      SHNO     ORDERNO                                                                                                                                     
40      ASN123   40303020                                                                                                                                    
40      ASN123   40303020                                                                                                                                    
30      ASN124   40303021                                                                                                                                    
30      ASN124   40303021                                                                                                                                    
30      ASN125   40303021    
STAT      SHNO     ORDERNO  ORDERNOTOTAL                                                                                                                    
40      ASN123   40303020    1                                                                                                                               
30      ASN124   40303021    2                                                                                                                               
30      ASN125   40303021    2     

STAT      SHNO     ORDERNO                                                                                                                                     
40      ASN123   40303020                                                                                                                                    
40      ASN123   40303020                                                                                                                                    
30      ASN124   40303021                                                                                                                                    
30      ASN124   40303021                                                                                                                                    
30      ASN125   40303021    
STAT      SHNO     ORDERNO  ORDERNOTOTAL                                                                                                                    
40      ASN123   40303020    1                                                                                                                               
30      ASN124   40303021    2                                                                                                                               
30      ASN125   40303021    2     

DB2应该可以使用分区,但您始终可以将其表示为一个
join

STAT      SHNO     ORDERNO                                                                                                                                     
40      ASN123   40303020                                                                                                                                    
40      ASN123   40303020                                                                                                                                    
30      ASN124   40303021                                                                                                                                    
30      ASN124   40303021                                                                                                                                    
30      ASN125   40303021    
STAT      SHNO     ORDERNO  ORDERNOTOTAL                                                                                                                    
40      ASN123   40303020    1                                                                                                                               
30      ASN124   40303021    2                                                                                                                               
30      ASN125   40303021    2     
select sso.stat, sso.shno, sso.orderno, o.OrderNoTotal
from (select STAT, SHNO, ORDERNO
      from BLUEWATER
      group by STAT, SHNO, ORDERNO
     ) sso join
     (select OrderNo, count(distinct SHNO) as OrderNoTotal
      from BlueWater
      group by OrderNo
     ) o
     on o.OrderNo = sso.OrderNo;

以下哪个问题?你能发布生成第一个例子的代码吗?你说的总和是指计数吗?如果您所需示例中的asn123和asn125看起来是错误的,那么如果两行的SHNO值相等,但STAT和ORDERKING值不同,那么它们将是两个不同的组,并且此查询的目的是消除重复的SHNO,您不应该从组中删除SHNO吗?它们不应该有不同的统计值,因为我将把SHNO的所有统计值更新为相同的值。@kolonel:如果您有不同的值,那么是的,您将得到更多的行。但是,如果有不同的值,如何在同一行中显示同一列的两个值?您可以通过只显示2个值中的1个来解决这个问题(例如,使用
min(STAT)over(partitionby SHNO order by STAT)
或类似方法),但我的猜测(基于示例数据)是,这不是我们想要的。@JohnLBevan不幸的是,DB2数据库不喜欢使用分区。有办法绕过它吗?我在一个论坛上读到了一些可能与此相关的东西:它抱怨'附近的语法不正确(“.有什么我需要更正的吗?@TobyDrrum…我没有注意到任何明显的问题。抱歉,这一定是一个糟糕的复制粘贴工作。尽管现在计算错误。OrderNottal不排除ORDERNO-SHNO重复项,这是关键要求。