![]() |
PCDVD數位科技討論區
(https://www.pcdvd.com.tw/index.php)
- 疑難雜症區
(https://www.pcdvd.com.tw/forumdisplay.php?f=34)
- - 謝謝:麻煩了,如何寫出這個sql
(https://www.pcdvd.com.tw/showthread.php?t=634173)
|
|---|
謝謝:麻煩了,如何寫出這個sql
我有兩個資料表
分別是產品資料表及訂單資料表 其欄位分別如下 產品資料表(產品代號、產品名稱、一箱單價、一盒單價)如圖一 訂單資料表(流水號、產品代號、單位、數量)如圖二 圖二的單位表示 如果是1,就去抓一箱單價 如果是2,就去抓一盒單價 請問: 寫出一個sql 產生如圖三的資料表呢? 圖三的金額500表示:5*100=500 謝謝 |
小弟是初學者
麻煩高手教一下,謝謝 :) |
select A.流水號,A.產品代號,A.數量,
(CASE A.單位 WHEN 1 THEN A.數量*B.一箱單價 WHEN 2 THEN A.數量*B.一盒單價 END) AS 金額 from 訂單資料表 A LEFT JOIN 產品資料表 B ON A.產品代號=B.產品代號 |
先從圖三這個表格來看,失去了 '一盒' 或 '一箱' 的
資訊,看起來就會像是 A01 這個產品有時候賣 500 有 時候賣 100,所以我會覺得這個 table 設計上就有點達 不到 business 上的需求 如果單純只是從技術面解決您的問題的話,我會在 圖一 的表格中加上一個單位的欄位,也就是一個產品代號會因 單位的不同而會有不同的價格,當然這個表格中原有的一 箱單價或一盒單價也就不需要了,只留一個單價欄位就可 以了 由於圖一表格修改了的關係,圖二表格中也要加上一個單 位的欄位,來表示購買者買的是一箱的 A01 或一盒的A01 如此一來圖三的結果就可以用 >> SQL ANSI 92 的寫法: SELECT 流水號, 產品代號, 圖二.單位, 數量*單價 FROM 圖一 INNER JOIN 圖二 ON 圖一.產品代號 = 圖二.產品代號 AND 圖一.單位 = 圖二.單位 >> SQL ANSI 89 (or 85?) 的寫法: SELECT 流水號, 產品代號, 圖二.單位, 數量*單價 FROM 圖一 , 圖二 WHERE 圖一.產品代號 = 圖二.產品代號 AND 圖一.單位 = 圖二.單位 有些狀況要嘗試著從不同角度切入去看問題,光從技術面 的其中一環(eg. SQL) 甚至只從技術面切入去看問題都會 有所不足 例如,如果這個案例是實際商業上的應用的話,還可能會 複雜很多,像是一箱的價格可能是沒有所謂的單價的,可 能是另外以折扣的方式來處理,期末時這些折扣的費用又 要另行列出之類的... 這時候也許有要多出個折扣表之類 的... |
引用:
謝謝 問題解決了 :like: |
引用:
謝謝你詳細的說明。 :like: |
| 所有的時間均為GMT +8。 現在的時間是03:10 AM. |
vBulletin Version 3.0.1
powered_by_vbulletin 2026。