0

データベースの列があります


テーブル名:

  • 売上高
  • trans_details

ディスパッチされた数量trans_detailsテーブルが更新されると、最初にデータが販売に挿入されます


売上高の列

  • 総量

trans_detailsの列

  • Ordered_quantity
  • dispatched_quantity
  • 保留中の数量

すべての値を表示したい:-ordered_quantity-dispatched_quantity-pending_quantity

SELECT 
    IF(trans.ordered_quantity!='',trans.ordered_quantity,(sorder.total_quantity)) AS quantity,
    IF(trans.dispatched!='',trans.dispatched,0) AS today_dispatched_qty,
    IF(trans.dispatched!='',trans.dispatched,0) AS dis_qty, 
    IF(trans.Pending_quantity!='',trans.Pending_quantity,sorder.total_quantity) AS pending_qty 
FROM 
    sales as sorder 
    LEFT OUTER JOIN trans_details as trans 

クエリは正常に機能していますが、数量が完全にディスパッチされると「0」になりますが、現在はtotal_quantityが表示されています...sorder.total_quantityこの状態で「0」に置き換えるとIF(trans.Pending_quantity='0',trans.Pending_quantity,sorder.total_quantity) AS pending_qty...最初は「0」が表示されますが、 total_quantityを表示します。..


サンプル出力:

total_quantity .......... dispatched_quantity ....... pending_quantity

50                    45                    5
 5                     5                    0
 5                     0                    5
4

1 に答える 1

0

私の推測では、データに NULL 値が含まれていると思います。問題が NULL で、データ型が数値の場合は、次のことを試してください。

SELECT coalesce(trans.ordered_quantity,sorder.total_quantity) AS quantity,
       coalesce(trans.dispatched,0) AS today_dispatched_qty,
       coalesce(trans.dispatched,0) AS dis_qty, 
       coalesce(trans.Pending_quantity,sorder.total_quantity) AS pending_qty 

これらが本当に文字列である場合は、NULL チェックを追加する必要があります。caseではなく、標準 SQL であるを使用することをお勧めしますif

select (case when trans.ordered_quantity is not null and trans.ordered_quantity <> ''
             then trans.ordered_quantity
             else sorder.total_quantity
       end) as quantity,
       . . .

そして最後に、あなたがonたまたまこの条項を取りやめただけだと思います。MySQL 以外のデータベースでは、解析エラーが発生します。ただし、良い習慣として、on内部結合または外部結合を指定するときは常に句を使用する必要があります。

于 2012-12-20T14:58:12.550 に答える