PCDVD數位科技討論區

PCDVD數位科技討論區 (https://www.pcdvd.com.tw/index.php)
-   疑難雜症區 (https://www.pcdvd.com.tw/forumdisplay.php?f=34)
-   -   請教SQL達人......一個有關 UNION 的語法問題 (https://www.pcdvd.com.tw/showthread.php?t=590394)

aln761 2006-02-10 10:18 AM

請教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:47 AM

兩個表單的話,有試過改用join的方式嗎???

aln761 2006-02-10 11:12 AM

引用:
作者瘋狂火星人
兩個表單的話,有試過改用join的方式嗎???


啊@@
拍謝,偶有點講錯
TABLE只有一個
偶剛說滴兩個表單是指分別下語法篩選後,甲+乙還有除了甲、乙的資料

cxh 2006-02-10 11:21 AM

引用:
作者aln761
不好意思在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


我現在下的是先挑出甲加乙,將名稱命名為...



把Group by 砍掉一個吧..

ex

(select field-x From Table a
union
select field-x From Table a )
Group BY field-x


你原句二個Group By 會造成無法依據..TRY

aln761 2006-02-10 11:29 AM

引用:
作者cxh
把Group by 砍掉一個吧..

ex

(select field-x From Table a
union
select field-x From Table a )
Group BY field-x


你原句二個Group By 會造成無法依據..TRY


試過把上面或下面的GROUP BY了,仍然不行,錯誤訊息也是一樣
繼續嘗試ING...

瘋狂火星人 2006-02-10 11:46 AM

引用:
作者aln761
啊@@
拍謝,偶有點講錯
TABLE只有一個
偶剛說滴兩個表單是指分別下語法篩選後,甲+乙還有除了甲、乙的資料


話說~~~
還是不太了解您的意思.....
您要的查詢結果是除了顯示甲+乙的戊之外,連帶把原本的甲、乙也顯示出來嗎???

aln761 2006-02-10 11:56 AM

引用:
作者瘋狂火星人
話說~~~
還是不太了解您的意思.....
您要的查詢結果是除了顯示甲+乙的戊之外,連帶把原本的甲、乙也顯示出來嗎???


我要查詢的結果是只顯示甲+乙的戊,還有本來的丙、丁,共三筆資料。
原本的甲、乙就不顯示出來了。

瘋狂火星人 2006-02-10 12:53 PM

引用:
作者aln761
我要查詢的結果是只顯示甲+乙的戊,還有本來的丙、丁,共三筆資料。
原本的甲、乙就不顯示出來了。


話說~~~
甲跟乙是不同名稱的話,我用MS-SQL試的結果,是不會加在一起的.....
或是你傳個測試用的資料表上來~我再TRY看看....

gunnertako 2006-02-10 01:25 PM

我記得改datatime好像不用轉格式的樣子

CyberEric 2006-02-10 01:50 PM

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修改。


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

vBulletin Version 3.0.1
powered_by_vbulletin 2025。