我有三張我需要拉數據的表,左表需要始終顯示在「where」中調出的行。我的問題是,因爲有三張桌子我無法得到這個工作。我嘗試了一些瘋狂的連接,它只在執行兩個表時工作,但是一旦我得到第三個表時它不起作用,那麼它將只顯示在所有三個表中都不爲空的行。我需要能夠在第一個表中顯示指定的ID,而不管另外兩個表對於指定的ID是否完全爲空一個查詢,三個表,顯示左表中的所有行?
我有一個數據庫,我只有讀取權限,所以更改結構就贏了'工作。下面是我的SQL代碼,它的作用就像獲取我想要的數據一樣,但有一個ID由於在指定的日期沒有數據而無法顯示。
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
幫助解釋結構,[用戶]表顯示該用戶的身份證號和姓名,該SalesOrderJournalDetail表顯示當天的銷售情況,以及UserTotal表顯示的每月銷售數據(通過一些計算)。
我需要從後兩個表中顯示當天的銷售額和月銷售額,並且需要從第一個表中提取用戶的名稱和ID。
所有這三個表的唯一數據是[用戶] .ID,SalesJournalDetail.SalesPersonUserId和UserTotal.UserId
任何想法如何,我能得到這個顯示所有的ID顯示在哪裏,無論cluase如果沒有該用戶的一天或每月的銷售額?
哦,這是使用Microsoft SQL
謝謝!
非常感謝你,非常徹底的答案比我的預期:)然而,它似乎並沒有工作時,我堅持到SQL管理Studio來測試它。我得到一個「無效的對象名'SalesUser'。」錯誤。我將「ActualPrice」改回「ActualCost」以匹配我的數據庫,但我不確定是否還有其他人需要更改?對不起,我對SQL很陌生。謝謝! – BlueCaret 2012-04-25 16:43:59
我的表名是[SalesUser],你的表名是[User] ..你需要進行更改,如果需要的話,以匹配你的表模式...它應該工作,因爲我已經創建了表,插入數據和運行上述查詢..只要確保對象名稱,即表和列名稱匹配您的表.. – 2012-04-26 04:05:05
明白了!有用!非常感謝!我一直試圖找出這一個星期,並基於現在的查詢,我沒有在哪裏關閉:) – BlueCaret 2012-04-26 04:25:08