2016-05-13 26 views
0
SELECT p.ticket AS posted, 
     e.ticket AS settled, 
     Sum(e.amount) 
FROM post AS p 
     LEFT JOIN settle AS e 
       ON p.ticket = e.ticket 
WHERE p.date = '2016-05-10 00:00:00.000' 
GROUP BY p.pticket, 
      e.eticket 
ORDER BY posted 

據我所知,分組或,其中是罪魁禍首,但我已經嘗試了許多變化,這兩個表中的行是:
(表1 =表2)
=(項目+稅= ))左加入排除空值,並採取左值

所以第二個表有兩行,我總和。我需要的日期,因爲它有很多信息,我已經嘗試過在日期和其他地方「空」,但不能得到這個權利。而不是null,它顯示了左表的值,就好像它們匹配一樣。

+1

您能向我們展示一些表結構以及預期和觀察的輸出嗎?你可能想要做一些像'COALESECE(sum(e.AMOUNT),0)'這樣的東西,但是沒有數據就很難確定。 –

+0

清理代碼,語法,標籤 – rsjaffe

+0

顯示您的當前輸出和預期輸出。數據樣本也會很好。 –

回答

0

所以我想通了!只是喜歡這個網站,並希望爲任何遇到此問題的人留下輸入,如果我的信息不準確,請糾正我,因爲我想詳細解釋,但基本上,從我所瞭解的以及從SQL基礎知識中,空值被視爲外部行,因此,我需要一個「左加入」:

SELECT p.ticket AS posted, 
      e.ticket AS settled, 
      Sum(e.amount) 
    FROM post AS p 
      LEFT JOIN settle AS e 
      ON p.ticket = e.ticket 
    WHERE p.date = '2016-05-10 00:00:00.000' 
    GROUP BY p.pticket, 
      e.eticket 
    ORDER BY posted 

一個很好的規則是站出來爲我和幫助我檢查我用null加入的是,Where條款應僅具備的條件表,其中空值將不會被包含,因此您保留外部行,但「is null」除外。你可以在未保存的表格上使用該列並仍然得到空值。

+0

單詞「外」是可選的。它應該不會導致行爲改變。至於where子句是的,如果你想限制左連接右邊的表的結果並保留空值,那麼是的,你需要把限制critiera作爲ON子句的AND,所以...... 'on p.ticket = e.ticket and e.attribute ='value'WHERE p.date = Date' – xQbert

+0

謝謝!,是的,我最初也是這樣讀的,外層是可選的,會重試,但是當我開始讀外層行,它似乎有意義多一點,將嘗試和複製,當我有機會,但思考過程中我的答案幫助了我,再次感謝! – berni3mack