0

上記の場所の数量が <= 5 であるインベントリ内の場所を選択しようとしているときに、スクリプトがあります。クエリが完了しました。現在、微調整を行っています。現在実行しているのは個別句を使用すると、同じ列に重複したレコードが引き続き表示されます。最初の列の隣の列が一意であることは知っていますが、区別すると、ある列がその列に関連する次の列にロールオーバーすると思いました。

これが私のコードです:

select DISTINCT bin.scannable_id as bin, 
  bi.bin_id as case1,
  pallet.scannable_id as pallet,       
 -- bi.isbn as fcsku, 
  nvl(fs.asin,bi.isbn) as asin, 
  sum(bi.quantity) as quantity, 
  pallet.creation_date as received_date 
  from containers bin 
  join containers pallet on pallet.containing_container_id = bin.container_id 
  join containers case on case.containing_container_id = pallet.container_id 
  join bin_items bi on bi.container_id = case.container_id 
  left join fcskus fs on fs.fcsku = bi.isbn 
  where bin.scannable_id like 'R-1-T%'
  and bi.quantity <= '5'
  group by bin.scannable_id, pallet.scannable_id, bi.bin_id, bi.owner,bi.isbn,nvl(fs.asin,bi.isbn), pallet.creation_date
  order by sum(bi.quantity);

scannable_id 列に明らかに重複したレコードが表示されている私の出力: ここに画像の説明を入力

正しいフォーマット conrad に感謝します。

    select DISTINCT bin.scannable_id as bin,   
  pallet.scannable_id as pallet,       
   nvl(fs.asin,bi.isbn) as asin, 
  sum(bi.quantity) as quantity   
  from containers bin 
  join containers pallet on pallet.containing_container_id = bin.container_id 
  join containers case on case.containing_container_id = pallet.container_id 
  join bin_items bi on bi.container_id = case.container_id 
  left join fcskus fs on fs.fcsku = bi.isbn 
  where bin.scannable_id like 'R-1-T%'
  having sum(bi.quantity) <= '5'
  group by bin.scannable_id, pallet.scannable_id, nvl(fs.asin,bi.isbn), bi.quantity
  order by sum(bi.quantity);
4

2 に答える 2

1

コメントで述べたように、ステートメントがあるDISTINCT場合は必要ありません。group byまた、日付フィールドをフォーマットします。これは、オラクル クライアントの構成によっては、日付形式全体 (日付時刻など) が表示されないためです。だからこれを試してください:

select  bin.scannable_id as bin, 
        bi.bin_id as case1,
        pallet.scannable_id as pallet,       
        nvl(fs.asin,bi.isbn) as asin, 
        to_char(pallet.creation_date, 'yyyy-mm-dd') as received_date 
        sum(bi.quantity) as quantity, 
  from containers bin 
     join containers pallet on pallet.containing_container_id = bin.container_id 
     join containers case on case.containing_container_id = pallet.container_id 
     join bin_items bi on bi.container_id = case.container_id 
     left join fcskus fs on fs.fcsku = bi.isbn 
 where bin.scannable_id like 'R-1-T%'
   and bi.quantity <= '5'
 group by bin.scannable_id, 
          pallet.scannable_id, 
          bi.bin_id, 
          bi.owner,
          bi.isbn,
          nvl(fs.asin,bi.isbn), 
          to_char(pallet.creation_date, 'yyyy-mm-dd')
 order by sum(bi.quantity);
于 2013-12-05T18:36:30.387 に答える
0

bi.bin_id行ごとに異なるため、結果セットには個別の結果しかありません。

  • distinct最終的に表示される結果セットに適用されます( to_charetc. 関数が処理されると)
  • distinctgroup byすでに式を使用している場合は冗長です

解決策:bi.bin_id選択式から列をスキップします。

あなたの論理も混乱しています。すべての bi.* 要素の SUM を知りたいとします。これを行うには、グループ化することも、テーブルbi.bin_idのフィールドを使用することもできません。これが、結果が常に 1biである理由です。quantity

于 2013-12-05T18:39:51.237 に答える