2017-05-11 23 views
0

私のクエリは次のとおりです。サブクエリ(DISTINCTとCOUNTを選択)

SELECT distinct d.Z4BSN2, 
    (SELECT COUNT(Z4RMID) 
    FROM ZWE944 as d1 
    where d1.Z4RMID = d.Z4RMID 
    and d1.Z4BSN2 = d.Z4BSN2) 
FROM ZWE944 as d 
WHERE Z4RYMD = 170505 

ソースデータ:

Z4RMID    Z4BSN2  Z4PONO Z4ITNO  Z4RYMD Z4RHMS Z4USER 
C17D29014A   801464552 MWV TO 2038284  170505 170103 CNVTST 
C87D25211C   801462997 MWV TO 2038292  170505 170103 CNVTST 
C87D25273D   801462997 MWV TO 2038292  170505 170103 CNVTST 
C87D25281D   801462997 MWV TO 2038292  170505 170103 CNVTST 
C87D25282Z   801462997 MWV TO 2038292  170505 170103 CNVTST 

私は2行を期待して、1と5のカウントしています。しかし、両方の行は私に1のカウントを与えています。私はどこが間違っているのか分かりません。助けてくれてありがとう!

+1

質問にサンプルデータを追加できますか?我々はいくつかのデータを見ることができたなら、何が続いているのかを知ることは簡単かもしれません。 – ollie

+0

なぜカウントする必要がありますか?どこでも使用していません –

+0

このクエリを使用して、EDIドキュメントのソースファイルを作成しています。私はそれらの2つの情報だけが必要です。説明のためにソースデータを追加しました。 – AlliDeacon

答えて

2

、あなたは内側のクエリは、あなたのサンプルデータが与えられ

select Z4BSN2, 
     count(Z4RMID) 
from ZWE944 
where Z4RYMD = 170505 
group by Z4BSN2 
1

と同じことを達成できることを必要としていないようです(あなたがサンプルデータと予想される出力を追加する必要があります)が真であるものを他の人としている提供Z4RMIDは1つのレコードだけを選択するため、Z4RMIDがどこにあるかを示す内部選択を意味するため、1と1のカウントを期待しています。

declare @zwe944 table 
(
Z4RMID varchar(10), 
Z4BSN2 varchar(10), 
Z4PONO varchar(10), 
Z4ITNO int, 
Z4RYMD int, 
Z4RHMS int, 
Z4User varchar(10) 
) 

INSERT INTO @zwe944 VALUES ('C17D29014A',801464552,'MWV TO',2038284,170505,170103,'CNVTST') 
INSERT INTO @zwe944 VALUES ('C87D25211C',801462997,'MWV TO',2038292,170505,170103,'CNVTST') 
INSERT INTO @zwe944 VALUES ('C87D25273D',801462997,'MWV TO',2038292,170505,170103,'CNVTST') 
INSERT INTO @zwe944 VALUES ('C87D25281D',801462997,'MWV TO',2038292,170505,170103,'CNVTST') 
INSERT INTO @zwe944 VALUES ('C87D25282Z',801462997,'MWV TO',2038292,170505,170103,'CNVTST') 


SELECT distinct d.Z4BSN2, 
    (SELECT COUNT(Z4RMID) 
    FROM @ZWE944 as d1 
    where d1.Z4RMID = d.Z4RMID 
    and d1.Z4BSN2 = d.Z4BSN2) 
    FROM @ZWE944 as d 
    WHERE Z4RYMD = 170505 

SELECT distinct d.Z4BSN2, 
    (SELECT COUNT(Z4RMID) 
    FROM @ZWE944 as d1 
    where d1.Z4BSN2 = d.Z4BSN2) 
FROM @ZWE944 as d 
WHERE Z4RYMD = 170505 

2番目のクエリは1と4のカウントを与えるが、それはデータ与えられた権利である:あなたが例えば何をしたい取得する場所を最初に削除