2016-10-25 4 views
3

カウント関数を使用してSQLクエリに問題があります。COUNTが複数の行を出力しています

私は内部結合を持っていないとき、55行を数えます。クエリに内部結合を追加すると、内部結合が多く追加されます。突然102列になりました。

SELECT COUNT([fmsStage].[dbo].[File].[FILENUMBER]) 
FROM [fmsStage].[dbo].[File] 
INNER JOIN [fmsStage].[dbo].[Container] 
    ON [fmsStage].[dbo].[File].[FILENUMBER] = [fmsStage].[dbo].[Container].[FILENUMBER] 
WHERE [fmsStage].[dbo].[File].[RELATIONCODE] = 'SHIP02' 
    AND [fmsStage].[dbo].[Container].DELIVERYDATE BETWEEN '2016-10-06' AND '2016-10-08' 
GROUP BY [fmsStage].[dbo].[File].[FILENUMBER] 

はまた、私はそれが彼らの内部で乱数で51行を返すためSELECT声明でTOP 1をしなければならない。

は、ここに私のSQLクエリです。 (おそらくランダムではありませんが、その内容を把握することはできません)[fmsStage].[dbo].[file].[FILENUMBER]から行数をカウントするにはどうすればよいですか?

+0

してグループを削除しますか?これは、2つのテーブル間で 'join'が動作する方法です。 –

+0

あなたはGROUP BYをします。 [fmsStage]。[dbo]。[File]。[FILENUMBER]の値ごとに1行/カウントを期待してください。 – jarlh

+0

ここでグループを削除しました。しかし、それは私が内部結合を追加する前よりも高い数値を出力します。テーブルFILEではFILENUMBER行がカウントされますが、テーブルCONTAINERではカウントされません。なぜそれがそれに加わるのですか? –

答えて

2

まず、あなたのクエリは、このようなより明確になります:

SELECT COUNT(f.[FILENUMBER]) 
FROM [fmsStage].[dbo].[File] f INNER JOIN 
    [fmsStage].[dbo].[Container] c 
    ON v.[FILENUMBER] = c.[FILENUMBER] 
WHERE f.[RELATIONCODE] = 'SHIP02' AND 
     c.DELIVERYDATE BETWEEN '2016-10-06' AND '2016-10-08'; 

ませGROUP BYは必要ありません。それ以外の場合は、ファイル番号ごとに1行だけ表示されますが、全体のカウントと同じくらい有用ではないようです。

注:COUNT(DISTINCT f.[FILENUMBER])が必要な場合があります。あなたの質問は、判断を下すのに十分な情報を提供していません。

0

だけ混乱している何句

SELECT COUNT([fmsStage].[dbo].[File].[FILENUMBER]) 
FROM [fmsStage].[dbo].[File] 
INNER JOIN [fmsStage].[dbo].[Container] 
    ON [fmsStage].[dbo].[File].[FILENUMBER] = [fmsStage].[dbo].[Container].[FILENUMBER] 
WHERE [fmsStage].[dbo].[File].[RELATIONCODE] = 'SHIP02' 
    AND [fmsStage].[dbo].[Container].DELIVERYDATE BETWEEN '2016-10-06' AND '2016-10-08' 
関連する問題