2017-11-10 5 views
0

if条件とif条件値によるSQLクエリを持っていますが、order byは正しく動作していません。そして私はすべての私の値の列(creditamt、debitamt)を10進データ型で持っています。ここで Mysql Order byはif節の値とは関係ありません。

が私のコードである

select batchno,fperiod,date,reference,desp,"7.00" as taxpec,sequal, 
if(creditamt-debitamt='0.00','0.00',((creditamt-debitamt)*-1)) as kdebitamt 
from glpost where rem4='SR'and reference="INV-A00428" 
and (fperiod between '1' and '11' AND gstperiod=0) 
order by kdebitamt; 

結果が

14.53
2467.94
270.00
3000.00

期待される結果である

です

14.53
270.00
2467.97
3000.00

誰かが私を助けることができることを願っています。ご協力いただきありがとうございます。

編集:オリジナルデータフォーム enter image description here debitamtの両方、creditamtのデータ・タイプは、小数点(10,2)です

+0

kdebitamtのデータ型とは何ですか?キャスト(小数点以下の桁数ではkdebitamt)で注文します – badger0053

+0

kdebitamtはエイリアスで、creditamtの小数点データ型からのものです。私はキャスト()とトリックkdebitamt + 0を試してみました。両方ともdid'nt work –

+0

[mcve]をお願いします。それは入力を含む。問題の列を選択した場合にも役立ちます。 – philipxy

答えて

1

あなたは文字列によって発注されています。数値列の列別名kdebitamtは、ORDER BY句で使用されている代わりに

select batchno,fperiod,date,reference,desp,"7.00" as taxpec,sequal, 
if(creditamt-debitamt='0.00','0.00',(creditamt-debitamt)*-1) as kdebitamt 
from glpost where rem4='SR'and reference="INV-A00428" 
and (fperiod between '1' and '11' AND gstperiod=0) 
order by (creditamt-debitamt)*-1; 

注意を使用し、文字列カラムとして(そのエイリアスによって参照されている場合)、その列を処理するためにそれを強制的に'0.00'文字列を使用していました。ただし、ソース列は数値であるため、エイリアスではなくソース列名を参照してください。

代替は、代わりにこれを使用してkdebitamtは、数値である:

if(creditamt-debitamt=0,0,(creditamt-debitamt)*-1) as kdebitamt 
+0

申し訳ありませんが、私はif節の中で何かを逃しました。もし0でないなら、creditamtの代わりに(creditamt-debitamt)* - 1と仮定してください。エイリアスを数値として扱う方法を聞かせてもらえますか? –

+0

IF() –

+0

でその変更の回答を修正本当にありがとう、私は本当に "0.00"を逃した。結局は素晴らしい作品です –