PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 疑難雜症區
帳戶
密碼
 

回應
 
主題工具
mor8
Major Member
 

加入日期: Aug 2005
文章: 237
謝謝:麻煩了,如何寫出這個sql

我有兩個資料表
分別是產品資料表及訂單資料表
其欄位分別如下
產品資料表(產品代號、產品名稱、一箱單價、一盒單價)如圖一
訂單資料表(流水號、產品代號、單位、數量)如圖二
圖二的單位表示
如果是1,就去抓一箱單價
如果是2,就去抓一盒單價
請問:
寫出一個sql
產生如圖三的資料表呢?
圖三的金額500表示:5*100=500
謝謝
     
      
舊 2006-07-04, 08:14 PM #1
回應時引用此文章
mor8離線中  
mor8
Major Member
 

加入日期: Aug 2005
文章: 237
小弟是初學者
麻煩高手教一下,謝謝
 
舊 2006-07-05, 09:39 AM #2
回應時引用此文章
mor8離線中  
smball
Major Member
 

加入日期: Apr 2005
您的住址: Taipei
文章: 214
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.產品代號
舊 2006-07-05, 09:54 AM #3
回應時引用此文章
smball離線中  
jhc
Regular Member
 

加入日期: Feb 2002
文章: 51
先從圖三這個表格來看,失去了 '一盒' 或 '一箱' 的
資訊,看起來就會像是 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) 甚至只從技術面切入去看問題都會
有所不足

例如,如果這個案例是實際商業上的應用的話,還可能會
複雜很多,像是一箱的價格可能是沒有所謂的單價的,可
能是另外以折扣的方式來處理,期末時這些折扣的費用又
要另行列出之類的... 這時候也許有要多出個折扣表之類
的...

此文章於 2006-07-05 10:18 AM 被 jhc 編輯.
舊 2006-07-05, 10:16 AM #4
回應時引用此文章
jhc離線中  
mor8
Major Member
 

加入日期: Aug 2005
文章: 237
引用:
作者smball
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.產品代號

謝謝
問題解決了
舊 2006-07-05, 12:33 PM #5
回應時引用此文章
mor8離線中  
mor8
Major Member
 

加入日期: Aug 2005
文章: 237
引用:
作者jhc
先從圖三這個表格來看,失去了 '一盒' 或 '一箱' 的
資訊,看起來就會像是 A01 這個產品有時候賣 500 有
時候賣 100,所以我會覺得這個 table 設計上就有點達
不到 business 上的需求

如果單純只是從技術面解決您的問題的話,我會在 圖一
的表格中加上一個單位的欄位,也就是一個產品代號會因
單位的不同而會有不同的價格,當然這個表格中原有的一
箱單價或一盒單價也就不需要了,只留一個單價欄位就可
以了

由於圖一表格修改了的關係,圖二表格中也要加上一個單
位的欄位,來表示購買者買的是一箱的 A01 或一盒的A01

如此一來圖三的結果就可以用


>> SQL ANSI 92 的寫法:
SELECT 流水號, 產品代號, 圖二.單位, 數量*單價
FROM 圖一 INNER JOIN 圖二 ON 圖一.產品代號 = 圖二.產品代號 AND 圖一.單位 = 圖二.單位

>> SQL ANSI 89 (or 85?) 的寫法:
SELECT 流水號,...

謝謝你詳細的說明。
舊 2006-07-05, 12:35 PM #6
回應時引用此文章
mor8離線中  


回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是12:35 AM.


vBulletin Version 3.0.1
powered_by_vbulletin 2026。