DB2 SQL查询以删除一列上的重复项,然后在新子集中的另一列上提供重复项的总和

时间:2014-10-24 18:24:34

标签: sql join db2 filtering

使用以下查询:

SELECT ADSTAT, ADASNO, ORDERNO FROM  BLUEWATER ORDER BY ADASNO; 

我可以得到以下内容:

ADSTAT  ADASNO     ORDERNO                                                                                                                                     
40      ASN123   40303020                                                                                                                                    
40      ASN123   40303020                                                                                                                                    
30      ASN124   40303021                                                                                                                                    
30      ASN124   40303021                                                                                                                                    
30      ASN125   40303021    

我正在寻找一个查询:

(1)考虑区分/消除任何重复的ADASNO行(只要ADASNO没有重复,无关紧要)(2)然后只创建第四列,显示存在的重复ORDERNO记录的总数(不在表格整体但在新的子集中已经消除了重复的ADASNO记录。)

目标数据库是DB2。我目前不知道什么版本,但将寻求确定这,虽然我假设不是最近的版本。

我的目标是产生以下内容的查询:

ADSTAT  ADASNO     ORDERNO  ORDERNOTOTAL                                                                                                                    
40      ASN123   40303020    1                                                                                                                               
30      ASN124   40303021    2                                                                                                                               
30      ASN125   40303021    2     

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

我仍在尝试建立DB2数据库的版本,足以说它不是最近的。

1 个答案:

答案 0 :(得分:1)

我们可以使用CTE或临时表来执行此操作,因为无法使用PARTITION关键字

with temp1 as (
SELECT ADASNO, MAX(adstat) as ADSTAT, MAX(ORDERNO) as ORDERNO
FROM BLUEWATER
group by ADASNO),
temp2 as ( select ADSTAT, COUNT(ORDERNO) as Count FROM temp1 GROUP BY ADSTAT)
SELECT temp1.ADASNO, temp1.ADSTAT, temp1.ORDERNO, temp2.Count
FROM temp1
join temp2
on temp1.ADSTAT = temp2.ADSTAT