ここでSQLを手伝ってくれる人がいるかどうか疑問に思っています。私は、レガシー DB システムからデータを取得する任務を負っています。これは、v7.23C1 を実行している IBM Informix DB です。ここで私がやろうとしていることはかなり単純かもしれませんが、私の人生ではそれを理解することはできません.
私は他の DB システムではなく、MS SQL Server に慣れていますが、これはかなり古いようです: http://publib.boulder.ibm.com/epubs/pdf/3731.pdf (?)
基本的に、ネストを含むクエリを実行したいだけですが、これを行う方法がわかりません。たとえば、次のようなクエリがあります。
SELECT cmprod.cmp_product,
(stock.stk_stkqty - stock.stk_allstk) stk_bal,
stock.stk_ospurch,
stock.stk_backord,
'Current Sales Period',
'Current Period -1',
'Current Period -2',
cmprod.cmp_curcost,
stock.stk_credate,
stock.stk_lastpurch,
stock.stk_binref
FROM informix.stock stock,
informix.cmprod cmprod
WHERE stock.stk_product = cmprod.cmp_product
AND (cmp_category = 'VOLV'
OR cmp_category = 'VOLD'
OR cmp_category = 'VOLA')
AND stk_loc = 'ENG';
ここで、基本的に「現在の期間 -1」のような値がある場所に、特定の日付範囲内の売上を取得するクエリを実行するネストされたフィールドを含めたいと考えています。それらを別々にまとめることができると確信していますが、完全に実行されたときにコンパイラが私のコードに満足するようには見えません。
おそらく次のようなものです(NB、この特定のクエリは別の列に対するものですが、アイデアはわかります):
SELECT s.stmov_product, s.stmov_trandate, s.stmov_qty
FROM informix.stmove s
WHERE s.stmov_product = '1066823'
AND s.stmov_qty > 0
AND s.stmov_trandate IN (
SELECT MAX(r.stmov_trandate)
FROM informix.stmove r
WHERE r.stmov_product = '1066823'
AND r.stmov_qty > 0)
さらに悪いのは、この DB が実行されているサーバーにアクセスできないことです。現時点では、ODBC ドライバーを介して接続し、生の SQL を実行し、結果を解析して .CSV に戻すカスタム C# アプリがあります。
ありとあらゆる助けに感謝します!