全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:9486
推到 Plurk!
推到 Facebook!

詢問有關SQL語法中的明細JOIN主檔的問題~?

答題得分者是:老大仔
shine0989
一般會員


發表:9
回覆:31
積分:8
註冊:2008-06-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-06-14 17:47:52 IP:210.68.xxx.xxx 訂閱
各位先進大家好..
小弟又來提問題了...

是這樣子的..
小弟最近在玩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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-06-14 23:43:06 IP:59.127.xxx.xxx 訂閱
試試如下的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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-06-15 09:32:19 IP:59.120.xxx.xxx 未訂閱
編輯記錄
老大仔 重新編輯於 2010-06-15 09:37:54, 註解 無‧
老大仔 重新編輯於 2010-06-15 10:07:16, 註解 無‧
老大仔 重新編輯於 2010-06-15 10:07:39, 註解 無‧
shine0989
一般會員


發表:9
回覆:31
積分:8
註冊:2008-06-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-06-15 09:43:20 IP:210.68.xxx.xxx 訂閱
感謝 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-06-15 10:07:54 IP:59.120.xxx.xxx 未訂閱

[code sql]
Select 明細檔.客編, Sum(明細檔.數量) , A.總金額
From 明細檔
Left Join (Select 客編, Sum(主檔.總金額) From 主檔
Group by 主檔.客編 , 總金額) as A on 明細檔.客編 = A.客編
GROUP BY 明細檔.客編, 明細檔.數量, A.總金額;

[/code]
shine0989
一般會員


發表:9
回覆:31
積分:8
註冊:2008-06-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-06-15 10:56:01 IP:210.68.xxx.xxx 訂閱
感謝 老大仔 大大的回覆..

小弟試老大仔大大的方式

結果有錯><"↓
沒有為 '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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2010-06-15 11:05:21 IP:59.120.xxx.xxx 未訂閱
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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2010-06-15 11:29:33 IP:210.68.xxx.xxx 訂閱
感謝 老大仔 大大的回覆..!!

小弟照 老大仔 大大 改的方式..!!

執行結果變成好多筆..一直總金額一直亂數累加...到第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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2010-06-15 11:38:57 IP:59.120.xxx.xxx 未訂閱
請問您的資料到底是怎樣的呢??
我是參照您所給的資料去做查詢的
也沒有問題捏@@


===================引 用 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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2010-06-15 14:11:43 IP:210.68.xxx.xxx 訂閱
非常感謝 老大仔 大大的回覆..^^

小弟又再仔細的測試一下...
哇塞..真的可以了..^^

老大仔 大大不愧是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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2010-06-15 23:26:10 IP:59.127.xxx.xxx 訂閱
真歹勢,其實我在測的時候是開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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2010-06-17 09:25:08 IP:210.68.xxx.xxx 訂閱
感謝 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...
?
系統時間:2024-03-29 23:28:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!