詢問有關SQL語法中的明細JOIN主檔的問題~? |
答題得分者是:老大仔
|
shine0989
一般會員 發表:9 回覆:31 積分:8 註冊:2008-06-21 發送簡訊給我 |
各位先進大家好..
小弟又來提問題了... 是這樣子的.. 小弟最近在玩JOIN的時候.. 發生一個問題... 就是... 小弟目前有二個table 分別為 『明細檔』及『主檔』 當小弟要以『明細檔』為主要的再將『主檔』JOIN進來... 此時.. 資料如下↓ 《主檔資料》 客編 單號 總金額 A001 R061401 200 A001 R061402 200 《明細檔》 客編 單號 產品 數量 單價 A001 R061401 001 1 150 A001 R061401 002 1 50 A001 R061402 001 1 150 A001 R061402 002 1 50 我的語法如下↓ select 明細檔.客編, sum(明細檔.數量), sum(主檔.總金額) 明細檔 INNER JOIN 主檔 ON(明細檔.公司=主檔.公司 and 明細檔.單號=主檔.單號) GROUP BY 明細檔.客編 結果↓ 客編 數量 總金額 A001 4 800 總金額會重覆計算二次...!! 應該是400才對.. 之後我試將SUM拿掉.. 我的語法如下↓ select * 明細檔 INNER JOIN 主檔 ON(明細檔.公司=主檔.公司 and 明細檔.單號=主檔.單號) 結果↓ 客編 單號 產品 數量 單價 總金額 A001 R061401 001 1 150 200 A001 R061401 002 1 50 200 A001 R061402 001 1 150 200 A001 R061402 002 1 50 200 難怪合計會變成800... 請問各位先進.. 有辦法避免這個問題讓總金額計算出是400~!! |
cobraliu
中階會員 發表:15 回覆:75 積分:83 註冊:2007-11-22 發送簡訊給我 |
試試如下的SQL:
select 明細檔.客編,sum(明細檔.數量),(select sum(a.總金額) from 主檔 where 明細檔.客編 =主檔.客編) from 明細檔 group by 明細檔.客編; select 明細檔.客編,明細檔.單號,sum(明細檔.數量),(select sum(主檔.總金額) from 主檔 where 明細檔.客編 =主檔.客編 and 主檔.單號 = 明細檔.單號) from 明細檔 group by 明細檔.客編,明細檔.單號; 上述是用MYSQL測試,因沒有MSSQL...
------
初學、初學、學了很久...還是在初學階段..Orz
編輯記錄
cobraliu 重新編輯於 2010-06-14 23:43:34, 註解 無‧
|
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
|
shine0989
一般會員 發表:9 回覆:31 積分:8 註冊:2008-06-21 發送簡訊給我 |
感謝 cobraliu 大大的回覆..!!
小弟剛剛試了一下大大所說的方式..!! 結果如下↓ 資料行前置詞 'a' 與用於查詢中的資料表名稱或別名不符。 而第二個是 結果如下↓ 客編 單號 總金額 A001 R061401 200 A001 R061402 200 ===================引 用 cobraliu 文 章=================== 試試如下的SQL: select 明細檔.客編,sum(明細檔.數量),(select sum(a.總金額) from 主檔 where 明細檔.客編 =主檔.客編) from 明細檔 group by 明細檔.客編; ? select 明細檔.客編,明細檔.單號,sum(明細檔.數量),(select sum(主檔.總金額) from 主檔 where 明細檔.客編 =主檔.客編 and 主檔.單號 = 明細檔.單號) from 明細檔 group by 明細檔.客編,明細檔.單號; 上述是用MYSQL測試,因沒有MSSQL... ?
編輯記錄
shine0989 重新編輯於 2010-06-15 09:45:09, 註解 無‧
|
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
|
shine0989
一般會員 發表:9 回覆:31 積分:8 註冊:2008-06-21 發送簡訊給我 |
|
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
Select 明細檔.客編, Sum(明細檔.數量) , A.總金額
From 明細檔 Left Join (Select 客編, Sum(主檔.總金額) as 總金額 From 主檔 Group by 主檔.客編 , 總金額) as A on 明細檔.客編 = A.客編 GROUP BY 明細檔.客編, 明細檔.數量, A.總金額 ===================引 用 shine0989 文 章=================== 感謝 老大仔大大的回覆.. 小弟試老大仔大大的方式 結果有錯><"↓ 沒有為 'A' 的資料行 2 指定任何資料行。 ===================引 用 老大仔 文 章=================== [code sql] Select 明細檔.客編, Sum(明細檔.數量) , A.總金額 ? From 明細檔 ?Left Join (Select 客編, Sum(主檔.總金額) From 主檔 Group by 主檔.客編 , 總金額) as A on 明細檔.客編 = A.客編 GROUP BY 明細檔.客編, 明細檔.數量, A.總金額; [/code]
編輯記錄
老大仔 重新編輯於 2010-06-15 11:15:28, 註解 無‧
|
shine0989
一般會員 發表:9 回覆:31 積分:8 註冊:2008-06-21 發送簡訊給我 |
感謝 老大仔 大大的回覆..!!
小弟照 老大仔 大大 改的方式..!! 執行結果變成好多筆..一直總金額一直亂數累加...到第103筆..!! 小弟希望結果是..↓ 客編 數量 總金額 A001 4 400 ===================引 用 老大仔 文 章=================== Select 明細檔.客編, Sum(明細檔.數量) , A.總金額? ?? From 明細檔? ?Left Join (Select 客編, Sum(主檔.總金額) as 總金額 ? From 主檔? Group by 主檔.客編 , 總金額) as A on 明細檔.客編 = A.客編? ?GROUP BY 明細檔.客編, 明細檔.數量, A.總金額 ===================引 用 shine0989 文 章=================== 感謝 老大仔大大的回覆.. 小弟試老大仔大大的方式 結果有錯><"↓ 沒有為 'A' 的資料行 2 指定任何資料行。 ===================引 用 老大仔 文 章=================== [code sql] Select 明細檔.客編, Sum(明細檔.數量) , A.總金額 ? From 明細檔 ?Left Join (Select 客編, Sum(主檔.總金額) From 主檔 Group by 主檔.客編 , 總金額) as A on 明細檔.客編 = A.客編 GROUP BY 明細檔.客編, 明細檔.數量, A.總金額; [/code] |
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
請問您的資料到底是怎樣的呢??
我是參照您所給的資料去做查詢的 也沒有問題捏@@ ===================引 用 shine0989 文 章=================== 感謝 老大仔?大大的回覆..!! 小弟照 老大仔?大大 改的方式..!! 執行結果變成好多筆..一直總金額一直亂數累加...到第103筆..!! 小弟希望結果是..↓ 客編 ?? 數量 ??? 總金額 A001 ?? ?4 ??? 400 ===================引 用 老大仔 文 章=================== Select 明細檔.客編, Sum(明細檔.數量) , A.總金額? ?? From 明細檔? ?Left Join (Select 客編, Sum(主檔.總金額) as 總金額 ? From 主檔? Group by 主檔.客編 , 總金額) as A on 明細檔.客編 = A.客編? ?GROUP BY 明細檔.客編, 明細檔.數量, A.總金額 ===================引 用 shine0989 文 章=================== 感謝 老大仔大大的回覆.. 小弟試老大仔大大的方式 結果有錯><"↓ 沒有為 'A' 的資料行 2 指定任何資料行。 ===================引 用 老大仔 文 章=================== [code sql] Select 明細檔.客編, Sum(明細檔.數量) , A.總金額 ? From 明細檔 ?Left Join (Select 客編, Sum(主檔.總金額) From 主檔 Group by 主檔.客編 , 總金額) as A on 明細檔.客編 = A.客編 GROUP BY 明細檔.客編, 明細檔.數量, A.總金額; [/code]
編輯記錄
老大仔 重新編輯於 2010-06-15 11:39:33, 註解 無‧
|
shine0989
一般會員 發表:9 回覆:31 積分:8 註冊:2008-06-21 發送簡訊給我 |
非常感謝 老大仔 大大的回覆..^^
小弟又再仔細的測試一下... 哇塞..真的可以了..^^ 老大仔 大大不愧是SQL的老大啊..^^ 太厲害了..!! 真的很感謝您..!! ===================引 用 老大仔 文 章=================== 請問您的資料到底是怎樣的呢?? 我是參照您所給的資料去做查詢的 也沒有問題捏@@ ===================引 用 shine0989 文 章=================== 感謝 老大仔?大大的回覆..!! 小弟照 老大仔?大大 改的方式..!! 執行結果變成好多筆..一直總金額一直亂數累加...到第103筆..!! 小弟希望結果是..↓ 客編 ?? 數量 ??? 總金額 A001 ?? ?4 ??? 400 ===================引 用 老大仔 文 章=================== Select 明細檔.客編, Sum(明細檔.數量) , A.總金額? ?? From 明細檔? ?Left Join (Select 客編, Sum(主檔.總金額) as 總金額 ? From 主檔? Group by 主檔.客編 , 總金額) as A on 明細檔.客編 = A.客編? ?GROUP BY 明細檔.客編, 明細檔.數量, A.總金額 ===================引 用 shine0989 文 章=================== 感謝 老大仔大大的回覆.. 小弟試老大仔大大的方式 結果有錯><"↓ 沒有為 'A' 的資料行 2 指定任何資料行。 ===================引 用 老大仔 文 章=================== [code sql] Select 明細檔.客編, Sum(明細檔.數量) , A.總金額 ? From 明細檔 ?Left Join (Select 客編, Sum(主檔.總金額) From 主檔 Group by 主檔.客編 , 總金額) as A on 明細檔.客編 = A.客編 GROUP BY 明細檔.客編, 明細檔.數量, A.總金額; [/code] |
cobraliu
中階會員 發表:15 回覆:75 積分:83 註冊:2007-11-22 發送簡訊給我 |
真歹勢,其實我在測的時候是開a(主檔),b(明細)的Table,不太習慣使用中文table,那個「a」其實就是「主檔 」
所以沒有改到那個「a」.... 第一個SQL是你要的方式,第二個只是讓你看出如果加上單號是算出另一個差異值,算是分項的加總. ===================引 用 shine0989 文 章=================== 感謝 cobraliu大大的回覆..!! 小弟剛剛試了一下大大所說的方式..!! 結果如下↓ 資料行前置詞 'a' 與用於查詢中的資料表名稱或別名不符。 而第二個是 結果如下↓ 客編 單號 總金額 A001 R061401 200 A001 R061402 200 ===================引 用 cobraliu 文 章=================== 試試如下的SQL: select 明細檔.客編,sum(明細檔.數量),(select sum(a.總金額) from 主檔 where 明細檔.客編 =主檔.客編) from 明細檔 group by 明細檔.客編; ? select 明細檔.客編,明細檔.單號,sum(明細檔.數量),(select sum(主檔.總金額) from 主檔 where 明細檔.客編 =主檔.客編 and 主檔.單號 = 明細檔.單號) from 明細檔 group by 明細檔.客編,明細檔.單號; 上述是用MYSQL測試,因沒有MSSQL... ?
------
初學、初學、學了很久...還是在初學階段..Orz |
shine0989
一般會員 發表:9 回覆:31 積分:8 註冊:2008-06-21 發送簡訊給我 |
感謝 cobraliu 大大的回覆..
原來如此啊..!! ^^" 看來是小弟不才... 沒有想到 cobraliu 大大的用意.. 小弟剛剛再試了一下大大的方法.. 可行耶... 真是太棒了... ===================引 用 cobraliu 文 章=================== 真歹勢,其實我在測的時候是開a(主檔),b(明細)的Table,不太習慣使用中文table,那個「a」其實就是「主檔 」 所以沒有改到那個「a」.... 第一個SQL是你要的方式,第二個只是讓你看出如果加上單號是算出另一個差異值,算是分項的加總. ===================引 用 shine0989 文 章=================== 感謝 cobraliu大大的回覆..!! 小弟剛剛試了一下大大所說的方式..!! 結果如下↓ 資料行前置詞 'a' 與用於查詢中的資料表名稱或別名不符。 而第二個是 結果如下↓ 客編 單號 總金額 A001 R061401 200 A001 R061402 200 ===================引 用 cobraliu 文 章=================== 試試如下的SQL: select 明細檔.客編,sum(明細檔.數量),(select sum(a.總金額) from 主檔 where 明細檔.客編 =主檔.客編) from 明細檔 group by 明細檔.客編; ? select 明細檔.客編,明細檔.單號,sum(明細檔.數量),(select sum(主檔.總金額) from 主檔 where 明細檔.客編 =主檔.客編 and 主檔.單號 = 明細檔.單號) from 明細檔 group by 明細檔.客編,明細檔.單號; 上述是用MYSQL測試,因沒有MSSQL... ? |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |