我是新來編寫SQL查詢,並一直試圖從3個不同的表中提取信息並將其鏈接在一起。麻煩加入3表
數據駐留在Microsoft SQL Server中。
這是我目前的查詢(不工作,我就打算的方式):
SELECT h.jhhold, h.jhjob, h.jhpart, h.jhrev, h.jhcust, h.jhextd, o.jadesc, h.jhpqty, o.jaoqty, o.jacqty, o.japo, o.javend
FROM Jhead AS h
LEFT JOIN jjops AS o ON h.jhjob = o.jajob
LEFT JOIN hpodt AS p ON h.jhjob = p.hdjob
WHERE h.jhpcmp = 0 AND o.jatype = 2 AND o.jacqty < o.jaoqty AND japcmp = 0
ORDER BY h.jhjob
爲了解釋什麼,我試圖做的。我有一個工作頭表Jhead,工作細節表jjops和採購訂單明細表hpodt。我相信工作號碼是頭表中的主要關鍵。
這是我的問題:一旦我添加第二個左連接,我結束了很多額外的重複信息行。
我已經使用GROUP BY jhead.jhjob嘗試,但得到以下錯誤:
「,因爲它並不在聚合函數或GROUP載列‘jhead.jhhold’在選擇列表中無效。BY子句」
於是我研究了誤差的解決方案之一是讓我GROUP BY這個樣子的: GROUP BY jhead.jhjob,jhead.jhhold,jhead.jhpart,jhead.jhrev,jhead.jhcust ,jhead.jhextd
但是,只要我把jhead.jhextd我得到這個錯誤: 「文本,ntext和圖像數據類型無法進行比較或排序,但使用IS NULL或LIKE運算符時除外。」
現在已經撞到了一堵磚牆。我確實發現可以將類型更改爲NVARCHAR。我不想按照說明字段進行排序,因爲它是唯一的,可能會對服務器造成嚴重的負擔。有一個更好的方法嗎?
使用示例數據編輯: 我刪除了額外的字段以簡化查詢並篩選了1個作業編號的結果。
只有1左連接:
與這兩個左聯接:
ERP軟件,你可以看到有下1個PO#多個就業機會,我只顯示與線感興趣工作號碼匹配。
查詢而更新
SELECT h.jhhold, h.jhjob, h.jhrev, o.jadesc, h.jhpqty, o.jaoqty, o.jacqty, o.japo, o.javend, p.hdprcd, p.hdrecd
FROM Jhead AS h
LEFT JOIN jjops AS o ON h.jhjob = o.jajob
LEFT JOIN hpodt AS p ON h.jhjob = p.hdjob
WHERE h.jhpcmp = 0 AND o.jatype = 2 AND o.jacqty < o.jaoqty AND japcmp = 0 AND p.hdjob = h.jhjob AND p.hdpo = o.japo
ORDER BY h.jhjob
這是越來越接近我想要的東西。現在的問題是,我的jadesc字段是複製第一個結果時,它應該實際上每行不同。
我過濾,只顯示一個作業。他們應該只有一列。
獲得額外的線路,但擁有所有我需要
SELECT h.jhhold, h.jhjob, h.jhrev, o.jadesc, h.jhpqty, o.jaoqty, o.jacqty, o.japo, o.javend, p.hdprcd, p.hdrecd, p.hdseq
FROM Jhead AS h
LEFT JOIN jjops AS o ON h.jhjob = o.jajob
LEFT JOIN hpodt AS p ON h.jhjob = p.hdjob
WHERE (h.jhpcmp = 0 AND o.jatype = 2 AND o.jacqty < o.jaoqty AND japcmp = 0 AND p.hdjob = h.jhjob AND p.hdpo = o.japo AND p.hdseq = o.jaseq AND o.jaopr != 'PT')
OR (h.jhpcmp = 0 AND o.jatype = 2 AND o.jacqty < o.jaoqty AND japcmp = 0 AND o.japo = 0 AND o.jaopr != 'PT')
ORDER BY h.jhjob, o.jaseq
你可以發佈一些樣本數據,然後預期的結果?如果你有多個記錄與每個'jhjob'關聯,你只需要一個,你想要返回哪一個? – Taryn
我現在盡我所能去做。 – MAK
請閱讀並遵循有關使用別名的這篇文章:http://msdn.microsoft.com/en-us/library/ms187455(v=sql.90).aspx –