'mssql' 搜索網誌文章共有 1
Category : SQL
Reg Date : 2008/10/24 19:00

星期天是家人聚會的日子, 老爸與哥哥一家及哥哥多年的朋友到家中來打麻將。哥哥的朋友在工作上遇到一個 SQL 查詢的瓶頸, 說要順便來問我。朋友一到, 就開始想解決方法。又是翻書又是直接連上 SQL Server 測試, 一時腦塞竟然完全沒有辦法想出方法。

最後, 老爸無聊的受不了, 趕緊先陪著打麻將再說。問題就被丟到九霄雲外去了。直到晚上 8 點多, 突然想到一早洗的衣服還沒有晾, 才跑到後陽台去晾衣服。突然閃過朋友的問題還沒有解決。沒有想到解答也隨著問題一起來了。真是踏破鐵鞋無覓處, 得來全不費功夫。

以下就簡單的舉一個例子。有二個資料表, "客戶" 與 "訂單"。
客戶
PK 客戶編號
  客戶姓名
  統一編號
  ...
訂單
PK 訂單編號
  客戶編號
  產品
  ...
需求是要列出所有的客戶, 及最多三筆該客戶訂單。

最基本要列出所有的客戶及訂單, 只要一個 LEFT OUTER JOIN 就可以解決了:

select a.客戶編號, a.客戶姓名, a.統一編號, b.訂單編號, b.產品, ...
from 客戶 as a left outer join 訂單 as b on a.客戶編號 = b.客戶編號

如果每個客戶只要列出最多三筆訂單, 只要加上一行就完成了:

select a.客戶編號, a.客戶姓名, a.統一編號, b.訂單編號, b.產品, ...
from 客戶 as a left outer join 訂單 as b on a.客戶編號 = b.客戶編號 where b.客戶編號 in (select top 3 客戶編號 from 客戶 as c where c.客戶編號 = a.客戶編號)

也許還有人有更好的方法, 也歡迎提出來喲。

可能大家會覺得我能力也太差了吧, 連這點小問題都沒有辦法在第一時間找出解決方案...不過, 能力差歸能力差啦。就像電影「當幸福來敲門」裡的一段話。

"I'm the type of person...
...if you ask me a question,
and I don't know the answer...
...I'm gonna tell you that I don't know.
But I bet you what.
I know how to find the answer, and I will find the answer.
Is that fair enough?"

The Pursuit of Happyness 當幸福來敲門

結論就是, 有時候工作上遇到瓶頸, 到處走一走動一動換換心境有時候比留在原地鑽牛角尖來的好。像我在公司如果突然有什麼地方邏輯不通、流程不順、寫不出來, 我就會起身去上個廁所伸展一下。往往回到位子上麻煩就解決了。



  
 0   0