【问题标题】:DB2 SQL query to remove duplicates on one column and then provide the sum of duplicates on another column within the new subsetDB2 SQL 查询删除一个列上的重复项,然后在新子集中的另一列上提供重复项的总和
【发布时间】:2014-12-20 15:36:12
【问题描述】:

使用以下查询:

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 没有重复项,无论哪个无关紧要),然后仅创建第四列,显示存在的重复 ORDERNO 记录的总数(不在整个表,但在已消除重复 ADASNO 记录的新子集中)。

目标数据库是 DB2。我目前不知道是什么版本,但会设法确定这一点,尽管我假设不是最新版本。

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

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

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

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

【问题讨论】:

    标签: sql join db2 filtering


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2013-08-01
      • 2014-12-19
      • 1970-01-01
      • 1970-01-01
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-19
      • 1970-01-01
      相关资源
      最近更新 更多