SELECT
hb.custnum,hb.custname as Cname,dv.custname as [CustName],'0' + hb.cellnum as cellnum,dv.ccelnumber,
UPPER(hb.subd) as subd,UPPER(dv.BilStAdd) as BilStAdd,hb.entity,dv.BilCtAdd
FROM [cust] as dv
OUTER APPLY (
SELECT TOP 1 * FROM ##custnumtbl WHERE ##custnumtbl.CustNum = dv.custnum ORDER BY totaldue DESC
) hb
Where
'0' + hb.cellnum <> dv.ccelnumber
or RTRIM(LTRIM(hb.custname)) <> RTRIM(LTRIM(dv.CustName))
or UPPER(hb.subd) <> RTRIM(LTRIM(UPPER(dv.BilStAdd)))
or UPPER(hb.entity) <> RTRIM(LTRIM(UPPER(dv.BilCtAdd)))
回答
對於SQL Server 2000:
SELECT
hb.custnum,hb.custname as Cname,dv.custname as [CustName],'0' + hb.cellnum as cellnum,dv.ccelnumber,
UPPER(hb.subd) as subd,UPPER(dv.BilStAdd) as BilStAdd,hb.entity,dv.BilCtAdd
FROM [cust] as dv
LEFT JOIN(
SELECT b.*
FROM (
SELECT CustNum, totaldue = MAX(totaldue)
FROM ##custnumtbl
GROUP BY CustNum
)a
INNER JOIN ##custnumtbl b
ON b.CustNum = a.CustNum
AND b.totaldue = a.totaldue
)hb
ON hb.CustNUm = dv.custnum
Where
'0' + hb.cellnum <> dv.ccelnumber
or RTRIM(LTRIM(hb.custname)) <> RTRIM(LTRIM(dv.CustName))
or UPPER(hb.subd) <> RTRIM(LTRIM(UPPER(dv.BilStAdd)))
or UPPER(hb.entity) <> RTRIM(LTRIM(UPPER(dv.BilCtAdd)))
正如指出的M.Ali,如果你不使用的情況下,敏感的排序,您可能想擺脫UPPER
的。
(注:OP確定這個答案寫數據庫之後它並不適用於SQL Server 2000中)
是的,如果你想要的。最簡單的方法是使用一個窗口功能,如row_number()
:
SELECT hb.custnum,hb.custname as Cname, dv.custname as [CustName],
'0' + hb.cellnum as cellnum, dv.ccelnumber,
UPPER(hb.subd) as subd,UPPER(dv.BilStAdd) as BilStAdd,hb.entity,dv.BilCtAdd
FROM [cust] dv LEFT JOIN
(SELECT c.*,
ROW_NUMBER() OVER (PARTITION BY c.CustNum ORDER BY totaldue DESC) as seqnum
FROM ##custnumtbl c
) hb
ON hb.CustNum = dv.custnum AND seqnum = 1
WHERE '0' + hb.cellnum <> dv.ccelnumber or
RTRIM(LTRIM(hb.custname)) <> RTRIM(LTRIM(dv.CustName)) or
UPPER(hb.subd) <> RTRIM(LTRIM(UPPER(dv.BilStAdd))) or
UPPER(hb.entity) <> RTRIM(LTRIM(UPPER(dv.BilCtAdd)));
我覺得outer apply
很可能有更好的表現。
打敗我吧。我打算使用'ROW_NUMBER'發佈答案。 +1 –
它適用於SQL 2008,但當我試圖在SQL 2000上運行它時,會發生此錯誤:'ROW_NUMBER'不是一個可識別的函數名稱。 ,這也是我試圖將我的應用查詢轉換爲左連接的原因 –
這是因爲ROW_NUMBER不是SQL Sever 2000上的有效語法。 –
- 1. 是否有可能將其中一個左外連接放在其他左外連接內
- 2. 是否有可能外部的PHP應用程序可以連接谷歌sql
- 3. 是否有可能將此轉換爲外部.js
- 4. 外部應用和左連接
- 5. 是否有可能將此查詢轉換爲連接?
- 6. 這是左連接還是右連接,內部還是外部?
- 7. MySQL外部左連接性能
- 8. 將此SQL查詢轉換爲LINQ到Lambda左外部連接
- 9. 是否有可能寫正確的外部連接,它總是空的左邊部分?
- 10. 左外部連接問題
- 11. Oracle SQL左外部連接
- 12. Linq左外部連接C#
- 13. Oracle和左外部連接
- 14. 左外部連接3表
- 15. 左外部連接sql 2012
- 16. 是否有可能與jquery調用的外部鏈接?
- 17. 是否有可能連接有時填充外部的附加回撥?
- 18. 左連接與內部連接使用子串/左功能時
- 19. 內有多個左外連接連接
- 20. 反連接是否比左外連接更高效?
- 21. 是否有可能通過外連接加入新樣式的內連接?
- 22. 是否有可能鏈接到外部HTM頁面?
- 23. 左外連接和PIVOT之間是否有一般關係?
- 24. 是否有可能delete_all與內部連接條件?
- 25. 是否有可能找出VNC連接是否有效
- 26. 數據庫性能 - 數據庫功能的左外部連接
- 27. 是否有可能將Xamarin ios應用程序連接到swift watchOS擴展
- 28. 內部連接和常規表格的外部左連接
- 29. MySQL左外部連接或內部連接
- 30. SQL Server速度:左外部連接vs內部連接
如果您沒有使用'UPPER()'函數進行'CASE敏感整理'對查詢返回的結果沒有任何影響,但可能會影響查詢性能。 –