データを取得する必要がある 3 つのテーブルがあります。左側のテーブルには、「where」で呼び出される行を常に表示する必要があります。私の問題は、3 つのテーブルがあるため、これを機能させることができないことです。私は狂ったように結合を試みました.2つのテーブルのみを実行すると機能しますが、3番目のテーブルを取得するとすぐに機能しなくなり、3つのテーブルすべてでnullではない行のみが表示されます. 指定された ID に対して他の 2 つのテーブルが完全に null であるかどうかに関係なく、最初のテーブルに指定された ID を表示できるようにする必要があります。
読み取りアクセスしかできないデータベースがあるため、この構造を変更しても機能しません。以下は、指定された日のデータがないために表示されない ID があることを除いて、必要なデータを取得するためにそのまま機能する SQL コードです。
select
[User].Id,
[User].Name,
convert(float,round(sum(SalesOrderJournalDetail.Price*SalesOrderJournalDetail.Shipped),2)) as 'Sales Yesterday',
convert(float,round(sum(SalesOrderJournalDetail.ActualCost*SalesOrderJournalDetail.Shipped),2)) as 'Cost Yesterday',
count(distinct(SalesOrderJournalDetail.SalesOrderId)) as 'Orders Yesterday',
count(SalesOrderJournalDetail.SalesOrderId) as 'Lines Yesterday',
convert(float,UserTotal.SalesMTD,2) as 'Sales MTD',
round(convert(float,UserTotal.CostMTD,2),2) as 'Cost MTD'
from
[User], UserTotal, SalesOrderJournalDetail
where
[User].Id in (' 725',' 150',' 239',' 225',' 209',' 227',' 222',' 232',' 241',' 215',' 214',' 722',' 134',' 201',' 238',' 721','M104',' 244',' 245',' 104')
and convert(varchar(10),SalesOrderJournalDetail.InvoiceDate,111) = '2012/04/19'
and [User].Id=SalesOrderJournalDetail.SalesPersonUserId
and SalesOrderJournalDetail.SalesPersonUserId=UserTotal.UserId
group by [User].Id, [User].Name, SalesOrderJournalDetail.SalesPersonUserId, UserTotal.UserId, UserTotal.SalesMTD, UserTotal.CostMTD
order by [User].Name
構造を説明するために、[User] テーブルにはユーザーの ID 番号と名前が表示され、SalesOrderJournalDetail テーブルには当日の売上が表示され、UserTotal テーブルには (いくつかの計算による) 月次売上データが表示されます。
後の 2 つのテーブルから 1 日の売上と月間売上を表示し、最初のテーブルからユーザーの名前と ID を取得する必要があります。
3 つのテーブルの一意のデータはすべて、[User].Id、SalesJournalDetail.SalesPersonUserId、および UserTotal.UserId です。
そのユーザーの日単位または月単位の売上がない場合でも、where 句に表示されるすべての ID を表示する方法はありますか?
ああ、これはMicrosoft SQLを使用しています