2016-09-28 26 views
0

我一直在尋找這個問題的解決方案很長一段時間,我發現了一些類似的問題,但我的建議的解決方案沒有工作。顯示不需要的resluts的SQL查詢(當連接3個表時)

我想加入這3個表格。

(1)ADM

  • AID =主鍵
  • BedNo = INT

(2)ADMdeposite

  • DID =主鍵
  • AID =外鍵
  • Dvalue =金錢
  • Dvalue =日期

(3)預訂

  • ID =主鍵
  • AID = Forei GN關鍵
  • Type = Nvchar
  • Value =金錢
  • Pname = nvarchar的

我用這個查詢

SELECT   
    Reservation.AID, Reservation.type, Reservation.value, Reservation.pname, 
    ADMdeposit.Ddate, ADMdeposit.Dvalue 
FROM 
    ADM 
INNER JOIN 
    ADMdeposit ON ADM.AID = ADMdeposit.AID 
INNER JOIN 
    Reservation ON ADM.AID = Reservation.AID 

我得到了想要的結果,但問題是,在ADMdeposite.Dvalue細胞重複自己的總數Reservation.Type單元數

這裏是在ADMdeposite.Dvalue

enter image description here

這裏的實際數據的打印屏幕查詢的結果是:

enter image description here

下面是結果我想要的:

enter image description here

+4

哪個RDBMS是這樣的?請添加一個標籤來指定您是使用'mysql','postgresql','sql-server','oracle'還是'db2' - 或者其他的東西。 –

+1

「問題是,ADMdeposite.Dvalue單元格自我複製」,這是執行1到多/多對多查詢時它應該執行的操作,它位於複製數據的連接側。如果你想讓它做別的事情,你期望的結果是什麼?分配/拆分與每個ADM和/或ADM存款相匹配的預訂記錄數量?只在第一個或某些類型上填充?或者每個ADM&ADM存款可能只選擇1個預訂,以便它是1對1?如果後者如何識別選擇哪個預約記錄? – Matt

+2

您有2種AID = 1的預留類型,所以ADM行被拉入兩次,並且還有ADMDeposit。你能顯示你想要的結果嗎?最好在你的問題中複製和粘貼輸出文本 - 這樣人們可以複製它並自己使用它。 –

回答

0

在閱讀了評論並看到您的目標是計算餘額(存款減去預訂)之後,我會建議將每個adm的所有存款金額相加,對於預訂做同樣的處理,然後將這兩個結果結合在一起以便計算餘額:

SELECT d.aid, 
     d.TotalDeposits, 
     r.TotalReservations, 
     d.TotalDeposits - r.TotalReservations as Balance 
FROM 
(SELECT ADMdeposit.aid, SUM(ADMdeposit.dvalue) as TotalDeposits 
FROM ADMdeposit GROUP BY ADMdeposit.aid) as d 

INNER JOIN 

(SELECT Reservation.AID, SUM(Reservation.value) as TotalReservations 
FROM Reservation GROUP BY Reservation.AID) as r 
ON d.AID = r.AID 
+0

先生,這正是我所需要的,除了保留的Pname缺失的部分,我希望顯示在AID旁邊的Pname。 太感謝你了 編輯: 我已經添加PNAME到查詢現在一切都是完美的再次 感謝FSmardGIS –

+0

我用這個查詢得到確切的結果。 SELECT d.aid, d.TotalDeposits, r.TotalReservations, r.pname, d.TotalDeposits - r.TotalReservations作爲餘額 FROM (SELECT ADMdeposit.aid,SUM(ADMdeposit.dvalue)作爲TotalDeposits FROM ADMdeposit GROUP BY ADMdeposit.aid)作爲d INNER JOIN (SELECT Reservation.pname,Reservation.AID,SUM(Reservation.value)作爲TotalReservations 從Reservation GROUP BY Reservation.pname,Reservation.AID)作爲r ON d.AID = r.AID –