結合が発生する前にカウントが必要な場合は、結合する前にカウントを生成する必要があります。
これは、それを達成するための 1 つの方法です。
SELECT A.Port_ID, A.refoct2015, B.refSept2015 , C.RefOct2014
FROM (SELECT Port_ID, Booking_Date, count(Ref) as refoct2015
FROM report
GROUP BY Port_Id, Booking_Date) A
INNER JOIN
(SELECT Port_ID, Booking_Date, count(Ref) as refSept2015
FROM Report_sept2015
GROUP BY Port_Id, Booking_Date) B
ON A.Port_ID = B.Port_ID
INNER JOIN
(SELECT Port_ID, Booking_Date, count(Ref) as RefOct2014
FROM report_oct2014
GROUP BY Port_Id, Booking_Date) C
ON B.Port_ID = C.Port_ID
Booking_dateを含めて参加しないのは奇妙に思えますが...
テーブル A に 100 個の異なる日付があり、テーブル B に 100 個の異なる日付があり、テーブル c に 100 個の異なる日付がある場合、それぞれが同じ port_Id を共有すると仮定すると、結果セットは 100*100*100 になります...おそらくなぜ 15 を取るのか分...確かに、結合を逃していませんか?
これは私にはもっと理にかなっているようです...
SELECT A.Port_ID, A.refoct2015, B.refSept2015 , C.RefOct2014
FROM (SELECT Port_ID, Booking_Date, count(Ref) as refoct2015
FROM report
GROUP BY Port_Id, Booking_Date) A
INNER JOIN
(SELECT Port_ID, Booking_Date, count(Ref) as refSept2015
FROM Report_sept2015
GROUP BY Port_Id, Booking_Date) B
ON A.Port_ID = B.Port_ID
and A.Booking_date= B.Booking_date
INNER JOIN
(SELECT Port_ID, Booking_Date, count(Ref) as RefOct2014
FROM report_oct2014
GROUP BY Port_Id, Booking_Date) C
ON B.Port_ID = C.Port_ID
and A.Booking_date= B.Booking_date
ただし、これは、日付とポート ID がすべてのテーブルにない場合、問題が発生することを意味します。内部結合によるデータ消去あり。通常、これを解決するには完全外部結合を使用しますが、mySQL はサポートしていません。動作をシミュレートするには、外部結合とユニオンを使用する必要があります。
だから、あなたが求めているものを推測し続けるのではなく. これらのテーブルの目的と達成しようとしていることを平易な英語で説明してください。元の質問を編集して編集します。
ここでXY問題に陥っているのではないかと心配しています
選択されていない場合、booking_date が関連するのはなぜですか?
これらの 3 つのテーブルのデータを日付でピボットしようとしているようですが、日付は表示されません....
あなたは次のようなものを求めていますか
Port_Id Date Oct2015 Sept2015 Oct2014
1 1/1/2015 500 250 0
1 1/2/2015 100 60 0
2 1/1/2015 100 540 60
?