2017-11-10 10 views
2

サブクエリ (select count(amazon)from b.amazon = 2およびmanifest = a.dbid)のwhere句を無視しているようです。テーブル結合列のサブクエリで不適切なカウント値

列アマゾンは私が期待してい正しい結果を得るマニフェストの値を、私は自分自身でクエリを実行する場合はINT のSQL Server 2014

入力し、入力され、(1

SELECT COUNTですアマゾン=アマゾン= 2、マニフェスト= '211104'の注文から) 結果返信1

私が以下のクエリを実行すると、マニフェスト= 211104のすべての注文の数が5になりますが、amazonの値は1の結果と2の結果になります。

Select distinct 
top 30 DBID, today ,sum([amazon-orders]) 
From 
(
    SELECT [dbid], [today], 
     (select count(amazon) from orders 
     where b.amazon = 2 and manifest = a.dbid) as [amazon-orders] 
    FROM [manifest] a 
    join orders b on a.[dbid] = b.[manifest] 
) t1 
Group By 
DBID, today 
order by dbid desc 

SQL SELECT SQL RESULTS

誰かが私を助けてください。あなたは余分なので、あなたが複数回を数えている参加してい

おかげ

+0

「私は、以下のクエリを実行すると211104 =マニフェストすべての注文の数ですが、アマゾンの値が4回の結果では1と2である5の結果を得ます1件の結果 "211104の結果は何ですか? –

+0

画像内の一番上の結果を見ると、DBID 211104のカウントが5です。これはすべての注文の数ですが、私は列amazon = 2の場合の注文数を取得しようとしており、その結果は1 – jasonkkt

答えて

0

どういうことですか?

SELECT top 30 [dbid], [today], sum(case when b.amazon = 2 then 1 else 0 end) as [amazon-orders] 
FROM [manifest] a 
join orders b on a.[dbid] = b.[manifest] 
group by DBID, today 
order by dbid desc 

ご質問が実際に2回注文を結んでいるため、カウントが増加しています。

+0

実際、テストデータはありませんが、誰が知っていますか?クロス/アウターアプライも機能します。 –

+0

これは私の問題のために働いてくれてありがとう – jasonkkt

1

...これを行う:あなたは列ができている場合

Select distinct 
top 30 DBID, today ,sum([amazon-orders]) 
From 
(
    SELECT [dbid], [today], 
     (select count(amazon) from orders b 
     where b.amazon = 2 and manifest = a.dbid) as [amazon-orders] 
    FROM [manifest] a 
) t1 
Group By 
DBID, today 
order by dbid desc 

またはこの

SELECT [dbid], [today], count(o.amazon) 
FROM [manifest] a 
join orders o on a.dbid = o.manifest and o.amazon = 2 
group by dbid, today 

または、このように参加したくない場合(クエリにこの1つの結合だけでなく、左結合を使用する必要があります)

SELECT [dbid], [today], sum(case when o.amazon is not null then 1 else 0 end) 
FROM [manifest] a 
left join orders o on a.dbid = o.manifest and o.amazon = 2 
group by dbid, today 
+0

ありがとう返事、Gareth Lyonsからの答えが私の問題を解決しました。あなたのものが私に与えます複数の部分の識別子 "b.amazon"は束縛できませんでした。 メッセージ145、レベル15、状態1、行1 SELECT DISTINCTが指定されている場合は、ORDER BY項目が選択リストに表示されている必要があります。 – jasonkkt

+0

@jasonkkt - テーブル名の後ろに "b"が必要だと修正しました。 – Hogan

0

使用この:

select a.DBID, a.today, count(b.amazon) from [manifest] a 
join orders b on a.[dbid] = b.[manifest] and b.amazon = 2 
Group By a.DBID, a.today 
+0

@jasonkkt - このクエリがあなたのために働くかどうか疑問に思っていますか? –

関連する問題