![]() |
||
|
Basic Member
加入日期: Apr 2005
文章: 17
|
請教SQL達人......一個有關 UNION 的語法問題
不好意思在PCDVD找不到有關程式語言的地方PO,只好在這裡問看看^__^
有個ORACLE SQL語法小弟試了狠久,都無法成功>__< 想請教一下站上的SQL高手,煩請賜教,謝謝。 假設在 A 的TABLE裡 有 名稱 數量 總金額 日期 四個欄位 甲 1 10 20060210 乙 2 40 20060210 丙 3 60 20060210 丁 4 160 20060210 (實際上依日期不同會不只四筆資料,目前假設只有四筆 ) 如果我要下 SQL 語法挑出資料(不更新、修改原先的資料) 要將甲、乙加在一起,叫做戊,像這樣 名稱 數量 總金額 日期 四個欄位 戊 3 50 20060210 丙 3 60 20060210 丁 4 160 20060210 我現在下的是先挑出甲加乙,將名稱命名為戊的 SELECT '戊' 名稱,SUM(數量) 數量,SUM(總金額) 總金額 FROM A WHERE 日期 = TO_DATE(20060210,'YYYYMMDD') AND (名稱='甲' OR 名稱='乙') GROUP BY '戊' 另外挑出不含甲、乙的 SELECT 名稱,SUM(數量) 數量,SUM(總金額) 總金額 FROM A WHERE 日期 = TO_DATE(20060210,'YYYYMMDD') AND 名稱<>'甲' AND 名稱<>'乙' GROUP BY 名稱 以上兩個語法我分別試過,都可以成功挑出資料 但我在做兩個表單UNION的時候就不行 我是這樣下的 SELECT '戊' 名稱,SUM(數量) 數量,SUM(總金額) 總金額 FROM A WHERE 日期 = TO_DATE(20060210,'YYYYMMDD') AND (名稱='甲' OR 名稱='乙') GROUP BY '戊' UNION SELECT 名稱,SUM(數量) 數量,SUM(總金額) 總金額 FROM A WHERE 日期 = TO_DATE(20060210,'YYYYMMDD') AND 名稱<>'甲' AND 名稱<>'乙' GROUP BY '名稱' 但是在執行的時候就會有錯@@ 會出現 expression must have same datatype as corresponding expression 我有嘗試將下面的語法中的 名稱 及group by修改成'戊' 雖然可以挑出資料,但它會將甲、乙的加在一起,也把丙、丁的加在一起了 就不是我想要的資料,我並不想將丙、丁加起來 試問...有辦法能成功挑出來嗎.... 此文章於 2006-02-10 10:23 AM 被 aln761 編輯. |
|||||||
|
|
|
Elite Member
![]() ![]() ![]() ![]() ![]() 加入日期: Jul 2004 您的住址: 無止盡的文件地獄~~
文章: 4,714
|
兩個表單的話,有試過改用join的方式嗎???
|
||
|
|
|
Basic Member
加入日期: Apr 2005
文章: 17
|
引用:
啊@@ 拍謝,偶有點講錯 TABLE只有一個 偶剛說滴兩個表單是指分別下語法篩選後,甲+乙還有除了甲、乙的資料 |
|
|
|
|
Major Member
![]() 加入日期: Sep 2001 您的住址: 工廠苦命人
文章: 230
|
引用:
把Group by 砍掉一個吧.. ex (select field-x From Table a union select field-x From Table a ) Group BY field-x 你原句二個Group By 會造成無法依據..TRY |
|
|
|
|
Basic Member
加入日期: Apr 2005
文章: 17
|
引用:
試過把上面或下面的GROUP BY了,仍然不行,錯誤訊息也是一樣 繼續嘗試ING... |
|
|
|
|
Elite Member
![]() ![]() ![]() ![]() ![]() 加入日期: Jul 2004 您的住址: 無止盡的文件地獄~~
文章: 4,714
|
引用:
話說~~~ 還是不太了解您的意思..... 您要的查詢結果是除了顯示甲+乙的戊之外,連帶把原本的甲、乙也顯示出來嗎??? |
|
|
|
|
Basic Member
加入日期: Apr 2005
文章: 17
|
引用:
我要查詢的結果是只顯示甲+乙的戊,還有本來的丙、丁,共三筆資料。 原本的甲、乙就不顯示出來了。 |
|
|
|
|
Elite Member
![]() ![]() ![]() ![]() ![]() 加入日期: Jul 2004 您的住址: 無止盡的文件地獄~~
文章: 4,714
|
引用:
話說~~~ 甲跟乙是不同名稱的話,我用MS-SQL試的結果,是不會加在一起的..... 或是你傳個測試用的資料表上來~我再TRY看看.... 此文章於 2006-02-10 01:45 PM 被 瘋狂火星人 編輯. |
|
|
|
|
Master Member
![]() ![]() ![]() ![]() 加入日期: Jan 2004
文章: 2,460
|
我記得改datatime好像不用轉格式的樣子
|
|
|
|
Basic Member
加入日期: Nov 2002 您的住址: Taipei, Taiwan
文章: 15
|
SELECT CAST('戊' AS VARCHAR(20)) 名稱,SUM(數量) 數量,SUM(總金額) 總金額
FROM A WHERE 日期 = TO_DATE(20060210,'YYYYMMDD') AND (名稱='甲' OR 名稱='乙') GROUP BY '戊' UNION SELECT 名稱,SUM(數量) 數量,SUM(總金額) 總金額 FROM A WHERE 日期 = TO_DATE(20060210,'YYYYMMDD') AND 名稱<>'甲' AND 名稱<>'乙' GROUP BY 名稱 第一行中的VARCHAR(20)可以依據你的table schema修改。 此文章於 2006-02-10 01:53 PM 被 CyberEric 編輯. |
|
|