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

如何判斷該資值為 小數。

答題得分者是:st33chen
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-05-15 08:57:37 IP:60.248.xxx.xxx 訂閱
請問各位大大。

以下SQL執行結果
公式((在庫量 生產中未入庫 計劃) - 訂單未交量)=有效庫存量。

品號 在庫量 生產中未入庫 計劃 訂單未交量 有效庫存量
--------- ------------ ----------------- --------- ------------------- ---------------
A 17.5 0 0 17.5 0
B 0 0 0 10.5 -11
C 0 198 36 108 126

希望能為以下結果。

品號 在庫量 生產中未入庫 計劃 訂單未交量 有效庫存量
--------- ------------ ----------------- --------- ------------------- ---------------
A 17.5 0 0 17.5 0
B 0 0 0 10.5 -10.5
C 0 198 36 108 126

請問是否有什麼函數可以去判斷,該欄位有小數,再利用CAST去處理。

THKS,麻煩大家。

chris681016
中階會員


發表:69
回覆:122
積分:98
註冊:2006-10-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-05-15 10:30:55 IP:211.75.xxx.xxx 訂閱
str=17.5100
用pos('.',str)>0
可以嗎~~~
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-05-15 10:48:14 IP:60.248.xxx.xxx 訂閱
不好意思,資料庫 MS SQL
好像沒有POS這個函數。

THKS。
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-05-15 10:56:41 IP:122.116.xxx.xxx 未訂閱
請問,

有效庫存量 是一個現成的欄位嗎?
若是, 那他的格式為何? 是整數還是實數欄位?
若是整數欄位, 請改成實數型欄位,
如果是實數型欄位, 那 insert 時的命令是什麼
如果不是, 那您 sql 的語句為何?

附記 instr(大字串, 小字串)
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2009-05-15 10:57:17, 註解 無‧
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-05-15 11:20:16 IP:60.248.xxx.xxx 訂閱
st33chen 大大,您好。

謝謝您,提醒我,有效在庫在SQL文是經過運算,SQL文如下,
紅色是我舊的寫法,藍色是OK的寫法(但是有點又臭又長的感覺)
請大大指教。


SELECT A.MB001,ISNULL(B.iQty,0) AS iQty,ISNULL(C.fQty,0) AS fQty,ISNULL(D.ZD005,0) AS tQty,ISNULL(E.oQty,0) AS oQty,
((ISNULL(B.iQty,0) ISNULL(C.fQty,0) ISNULL(D.ZD005,0)) - ISNULL(E.oQty,0)) As uQty,
((Cast(ISNULL(B.iQty,0) AS DECIMAL(12,1)) Cast(ISNULL(C.fQty,0) AS DECIMAL(12,1)) Cast(ISNULL(D.ZD005,0) AS DECIMAL(12,1))) - Cast(ISNULL(E.oQty,0) AS DECIMAL(12,1))) As uQty,
ISNULL(nQty,0) As nQty
FROM (
SELECT DISTINCT TD004 AS MB001
FROM ERP.A01A.dbo.COPTC
LEFT JOIN ERP.A01A.dbo.COPTD ON TC001 = TD001 and TC002 = TD002
WHERE TC001 IN ('220')
AND TD016 IN ('N')
--ORDER BY 1
UNION
SELECT DISTINCT MB001
FROM ERP.A01A.dbo.INVMB LEFT JOIN ERP.A01A.dbo.INVMC ON MB001 = MC001
WHERE MC002 IN ('21','21-3','28','28-3','2B-1')
AND MC007 <> 0
--GROUP BY MB001
--ORDER BY 1
) A LEFT JOIN
(
SELECT ME001,SUM (MF010*MF008) AS iQty
FROM ERP.A01A.dbo.INVME LEFT JOIN ERP.A01A.dbo.INVMF ON ME001 = MF001 and ME002 = MF002
WHERE ME007 IN ('N')
AND MF007 IN ('21','21-3','28','28-3','2B-1')
GROUP BY ME001
) B ON A.MB001 = B.ME001
LEFT JOIN
(
SELECT TA006,fQty=SUM( (FLOOR(TA015/18)-1)*18 )
FROM ERP.A01A.dbo.MOCTA
LEFT JOIN ERP.A01A.dbo.MOCXA ON XA002 = TA002
WHERE TA001 IN ('510','510A')
AND (XA053 = 'N' OR XA053 IS NULL)
GROUP BY TA006
) C ON A.MB001 = C.TA006
LEFT JOIN
(
SELECT ZD001,ZD005--,TA006,fQty=SUM( (FLOOR(TA015/18)-1)*18 )
FROM AD2SERVER.ERP.dbo.MOCZD
) D ON A.MB001 = D.ZD001
LEFT JOIN
(
SELECT TD004,oQty=SUM(TD008-TD009)
FROM ERP.A01A.dbo.COPTC
LEFT JOIN ERP.A01A.dbo.COPTD ON TC001 = TD001 and TC002 = TD002
WHERE TC001 IN ('220')
AND TD016 IN ('N')
GROUP BY TD004
) E ON A.MB001 = E.TD004
LEFT JOIN
(
SELECT TH004,SUM(TH008) AS nQty
FROM ERP.A01A.dbo.COPTG LEFT JOIN ERP.A01A.dbo.COPTH ON TG001 = TH001 and TG002 = TH002
WHERE TG023 = 'N'
GROUP BY TH004
) F ON A.MB001 = F.TH004
ORDER BY 1
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-05-15 13:22:58 IP:122.116.xxx.xxx 未訂閱
您好,

先說明, 我 mssql 不熟, 在此依經驗判斷

1. 再怎麼看,
((ISNULL(B.iQty,0) ISNULL(C.fQty,0) ISNULL(D.ZD005,0)) - ISNULL(E.oQty,0)) As uQty,
這一片段句子應該選出的值是帶有小數的, 只是您用來顯示或列印的 client 軟体把他 show 成 整數.
可否檢查一下您在顯示或列印 uqty 這欄位時有無特殊處理或定義?

或是說明一下您在哪裡看到
品號 在庫量 生產中未入庫 計劃 訂單未交量 有效庫存量
--------- ------------ ----------------- --------- ------------------- ---------------
A 17.5 0 0 17.5 0
B 0 0 0 10.5 -11
C 0 198 36 108 126
這樣的輸出結果?


2. cast 可以用 round 來代替嗎 ? 感覺會比較清爽點.
((Cast(ISNULL(B.iQty,0) AS DECIMAL(12,1)) Cast(ISNULL(C.fQty,0) AS DECIMAL(12,1)) Cast(ISNULL(D.ZD005,0) AS DECIMAL(12,1))) - Cast(ISNULL(E.oQty,0) AS DECIMAL(12,1))) As uQty,
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2009-05-15 13:25:03, 註解 無‧
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-05-15 14:06:02 IP:60.248.xxx.xxx 訂閱
st33chen 您好。

這一段SQL文,
((ISNULL(B.iQty,0) ISNULL(C.fQty,0) ISNULL(D.ZD005,0)) - ISNULL(E.oQty,0)) As uQty,

是SQL Query去Run,顯示的結果有小數一律被取整。
是驗算才發現被取整,尚未丟至程式中。

round 應該會比較短點,麻煩您,thks。
carstyc
資深會員


發表:16
回覆:254
積分:329
註冊:2003-07-18

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-05-15 14:18:04 IP:203.79.xxx.xxx 訂閱

select case 有效庫存量-round(有效庫存量,0) when 0 then 有效庫存量 else 有效庫存量 end from table
(無小數點處理) (有小數點處理)



===================引 用 t0288542 文 章===================
請問各位大大。

以下SQL執行結果
公式((在庫量 生產中未入庫 計劃) - 訂單未交量)=有效庫存量。

品號 在庫量 生產中未入庫 計劃 訂單未交量 有效庫存量
--------- ------------ ----------------- --------- ------------------- ---------------
A 17.5 0 0 17.5 0
B 0 0 0 10.5 -11
C 0 198 36 108 126

希望能為以下結果。

品號 在庫量 生產中未入庫 計劃 訂單未交量 有效庫存量
--------- ------------ ----------------- --------- ------------------- ---------------
A 17.5 0 0 17.5 0
B 0 0 0 10.5 -10.5
C 0 198 36 108 126

請問是否有什麼函數可以去判斷,該欄位有小數,再利用CAST去處理。

THKS,麻煩大家。

編輯記錄
carstyc 重新編輯於 2009-05-15 14:18:54, 註解 無‧
AndrewK
高階會員


發表:6
回覆:151
積分:161
註冊:2006-10-09

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-05-15 14:53:59 IP:60.250.xxx.xxx 訂閱
Hello

建議你做兩個動作 1和2
1.檢查 join 而成的欄位屬性是否正確
2.fQty=SUM( (FLOOR(TA015/18)-1)*18 )
這裡會有問題
這句可以思考看看有沒有辦法將 floor 函數用另外的函數替代看看
亦或是 floor 函數直接拿掉
3.join 而成的 sql 語法,是否有刪減過,有些語法看起來有點怪
4.您的有效庫存量和應採購量有關嗎???
5.檢查是否有小數的方法 -> 將原欄位值,用 floor 函數後,判斷是否一樣







------
Just Do It
-------------------------
其實男生不是真的喜歡你不減肥,而是喜歡你愛吃還不肥;也不是真的喜歡你不化妝,而是喜歡你素顏也好看;也不是真的喜歡你瘦,而是喜歡你瘦卻有胸;也不是真喜歡你獨立,而是他忙的時候別煩他。女孩子,太認真你就輸了。
編輯記錄
AndrewK 重新編輯於 2009-05-15 14:57:16, 註解 無‧
AndrewK 重新編輯於 2009-05-15 14:59:22, 註解 無‧
AndrewK 重新編輯於 2009-05-15 15:01:55, 註解 無‧
AndrewK 重新編輯於 2009-05-15 18:50:09, 註解 無‧
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#10 引用回覆 回覆 發表時間:2009-05-15 15:44:32 IP:122.116.xxx.xxx 未訂閱


( (ISNULL(B.iQty,0) *1.0 ISNULL(C.fQty,0) *1.0 ISNULL(D.ZD005,0) *1.0) - ISNULL(E.oQty,0) *1.0 ) As uQty,

看看會如何, 這種做法是以前電腦還不是很完善時用的, 照理現代應不致如此, 不過試一下何妨



假如不管 sql tool 如何顯示, 丟到 client 程式看看會如何
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
系統時間:2024-04-24 2:58:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!