如何判斷該資值為 小數。 |
答題得分者是:st33chen
|
t0288542
中階會員 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
請問各位大大。
以下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 發送簡訊給我 |
|
t0288542
中階會員 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
|
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
請問,
有效庫存量 是一個現成的欄位嗎? 若是, 那他的格式為何? 是整數還是實數欄位? 若是整數欄位, 請改成實數型欄位, 如果是實數型欄位, 那 insert 時的命令是什麼 如果不是, 那您 sql 的語句為何? 附記 instr(大字串, 小字串)
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2009-05-15 10:57:17, 註解 無‧
|
t0288542
中階會員 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
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 發送簡訊給我 |
您好,
先說明, 我 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 發送簡訊給我 |
|
carstyc
資深會員 發表:16 回覆:254 積分:329 註冊:2003-07-18 發送簡訊給我 |
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 發送簡訊給我 |
Hello
建議你做兩個動作 1和2 1.檢查 join 而成的欄位屬性是否正確 2.fQty=SUM( (FLOOR(TA015/18)-1)*18 ) 這裡會有問題 這句可以思考看看有沒有辦法將 floor 函數用另外的函數替代看看 亦或是 floor 函數直接拿掉 3.join 而成的 sql 語法,是否有刪減過,有些語法看起來有點怪 4.您的有效庫存量和應採購量有關嗎??? 5.檢查是否有小數的方法 -> 將原欄位值,用 floor 函數後,判斷是否一樣
------
Just Do It ------------------------- 其實男生不是真的喜歡你不減肥,而是喜歡你愛吃還不肥;也不是真的喜歡你不化妝,而是喜歡你素顏也好看;也不是真的喜歡你瘦,而是喜歡你瘦卻有胸;也不是真喜歡你獨立,而是他忙的時候別煩他。女孩子,太認真你就輸了。 |
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
用
( (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 (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |