|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
aln761
註冊時間: 2006-02-10 文章: 1
第 1 樓
|
發表於: 星期五 二月 10, 2006 11:21 am 文章主題: 請教在同一個table 要做篩選後及 UNION的問題... |
|
|
假設在 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修改成'戊'
雖然可以挑出資料,但它會將甲、乙的加在一起,也把丙、丁的加在一起了
就不是我想要的資料
請問有辦法成功挑出來嗎.... |
|
回頂端 |
|
|
bin1x
註冊時間: 2004-08-27 文章: 462
第 2 樓
|
發表於: 星期五 二月 10, 2006 7:28 pm 文章主題: |
|
|
我曾遇過這種情況啦
經過好幾次的sql
尤其有用sum()做的,
後面的會突然多1位
而無法union,別說你覺得不合理,我也是
我的怪招是
代碼: |
SELECT TMP1.OD_SALNO,SMP1.P_NAME,TMP1.CU_NO,SMP1.CU_SNAME,TMP1.OD_NO,SMP1.OD_NAME,SMP1.P_SALE,TMP1.SUM_QTY;
FROM TMP1,SMP1;
WHERE TMP1.OD_SALNO = SMP1.OD_SALNO AND;
TMP1.CU_NO = SMP1.CU_NO AND;
TMP1.OD_NO = SMP1.OD_NO ;
INTO CURSOR OBJ1
SELECT TMP1.OD_SALNO,PERSON.P_NAME,TMP1.CU_NO,CUSTOM.CU_SNAME,TMP1.OD_NO,ORDER.OD_NAME,0000000000,TMP1.SUM_QTY;
FROM TMP1,PERSON,CUSTOM,ORDER;
WHERE TMP1.OD_SALNO = PERSON.P_NUM AND;
TMP1.CU_NO = CUSTOM.CU_NO AND;
TMP1.OD_NO = ORDER.OD_NO AND;
TMP1.OD_SALNO+TMP1.CU_NO+TMP1.OD_NO NOT IN (SELECT OD_SALNO+CU_NO+OD_NO FROM OBJ1);
INTO CURSOR OBJ2
SELECT SMP1.OD_SALNO,SMP1.P_NAME,SMP1.CU_NO,SMP1.CU_SNAME,SMP1.OD_NO,SMP1.OD_NAME,SMP1.P_SALE,000000000000.000;
FROM SMP1;
WHERE SMP1.OD_SALNO+SMP1.CU_NO+SMP1.OD_NO NOT IN (SELECT OD_SALNO+CU_NO+OD_NO FROM OBJ1) AND;
SMP1.OD_SALNO+SMP1.CU_NO+SMP1.OD_NO NOT IN (SELECT OD_SALNO+CU_NO+OD_NO FROM OBJ2);
INTO CURSOR OBJ3
SELECT * FROM OBJ1 UNION ALL;
SELECT * FROM OBJ2 UNION ALL;
SELECT * FROM OBJ3 INTO CURSOR TMP2
|
其中那個00000000.000 就是怪招,把它位數定起來
沒辦法,怪問題就用怪招
現在想起來,還是覺得不合理,而且我找到的這個還"只有"兩個sql 就出問題了
我曾想過是不是和decimal 有關,好像無關吧
再說了,你的訊息似乎和資料型態有關,而不是位數不同無法union
我想起來了,再補充一下
有兩個sum()函數當union 起來,再作group by 時
可能怕有溢位,所以結合的結果好像會自動多一位出來,在統計銷售數字時
就常碰到
所以會有位數不合,至於型態不合,沒碰過 |
|
回頂端 |
|
|
yoncen
註冊時間: 2005-08-29 文章: 33
第 3 樓
|
發表於: 星期五 十二月 04, 2009 8:44 pm 文章主題: |
|
|
SELECT 名稱,SUM(數量) 數量,SUM(總金額) 總金額
FROM A
WHERE 日期 = TO_DATE(20060210,'YYYYMMDD')
AND 名稱<>'甲'
AND 名稱<>'乙'
GROUP BY 名稱
UNION ALL
SELECT '戊' AS 名稱,SUM(數量) 數量,SUM(總金額) 總金額
FROM A
WHERE 日期 = TO_DATE(20060210,'YYYYMMDD')
AND (名稱='甲' OR 名稱='乙')
位置调换一下,因为vfp会将第一个select中的字段做为默认宽度。 _________________ 從事企業ERP開發,學會止境,精益求精。 |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|