使用以下查询:
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
我正在寻找一个查询,它将消除重复的SHNO行,然后创建第四列,它是ORDERNO重复次数的总和(此总数是在消除了SHNO重复之后计算的)。
目标数据库是DB2。我目前不知道什么版本,但将寻求确定这,虽然我假设不是最近的版本。
我的目标是产生以下内容的查询:
STAT SHNO ORDERNO ORDERNOTOTAL
40 ASN123 40303020 1
30 ASN124 40303021 2
30 ASN125 40303021 2
解决方案需要避免使用PARTITION关键字,因为此版本的DB2不接受它。
答案 0 :(得分:1)
我不熟悉DB2,但以下内容适用于大多数SQL版本:
SELECT STAT, SHNO, ORDERNO, count(1) OrderNoTotal
FROM BLUEWATER
GROUP BY STAT, SHNO, ORDERNO
ORDER BY SHNO;
@JohnLBevan
您的解决方案提供以下内容:
STAT SHNO ORDERNO ORDERNOTOTAL
40 ASN123 40303020 2
30 ASN124 40303021 2
30 ASN125 40303021 1
我正在寻求这个:
STAT SHNO ORDERNO ORDERNOTOTAL
40 ASN123 40303020 1
30 ASN124 40303021 2
30 ASN125 40303021 2
有两个记录有40303021,所以每个记录旁边的值是ORDERNOTOTAL中的值2
根据以上评论进行更新
http://sqlfiddle.com/#!6/7ab95/3
select STAT
, SHNO
, ORDERNO
, count(shno) over (partition by OrderNo) OrderNoTotal
from BLUEWATER
group by STAT
, SHNO
, ORDERNO
答案 1 :(得分:0)
DB2应该可以正常使用分区,但您始终可以将其表示为join
:
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;