あなたは私が解決することができません。このSQLの問題で私を助けることを願って:SQL TOP 1問題という記録が見つからないとき
私はこのような項目番号ごとに複数のエントリとの価格リストファイルを持っている:
- ITEMNO
- にValidFrom
- ValidTo
- 価格
今日、有効な価格でリストを生成しようとすると、次の文を使って適切なレポートを取得します。有効な価格が見つからない場合、つまり今日はレコードがない場合にのみ問題が発生します。この場合、最初のTOP 1サブクエリはまだ(ランダム?)値を返し、レポートを破棄します。
私は、TOP 1は常に定義によって1つの値を返すと仮定しますか、これを防ぐためのトリックがありますか?
本当にありがとうございます。あなたが要求したデータセットが空の場合
SELECT
MITBAL.MBITNO as 'Artikel', MITMAS.MMITDS as 'Bezeichnung',
MITBAL.MBBUYE as 'Disponent', MITMAS.MMNEWE as 'Gewicht',
MITBAL.MBSUNO as 'Lieferant', MMITTY as 'Typ',
m9ucos as 'Std.-Kosten', idsunm as 'Lieferantenname',
iicucd as 'WSL', MBEOQT as 'EOQ',
(select count(*)
from RCE12_Staging.dbo.mpagrl
left outer join RCE12_Staging.dbo.mpagrh on aicono = ahcono
and aiagnb = ahagnb and aisuno = ahsuno
where aicono = 2
and aiobv1 = mbitno and aisagl = 20
and aisuno between '400000' and '599999' and aigrpi = 40
and aiuvdt >= CONVERT(char(8), GETDATE(), 112) and ahpast = '40') as 'Anz.Lief',
(select TOP 1 ajpupr
from RCE12_Staging.dbo.mpagrp
left outer join RCE12_Staging.dbo.mpagrh on ajcono = ahcono
and ajagnb = ahagnb and ajsuno = ahsuno
left outer join RCE12_Staging.dbo.mpagrl on ajcono = aicono
and ajagnb = aiagnb and ajsuno = aisuno
where ajcono = 2
and ajobv1 = mbitno and ajsuno = mbsuno
and ajmapr = 1 and ajgrpi = 40
and ajfvdt < CONVERT(char(8), GETDATE(), 112) and ahpast = '40'
and ahfvdt < CONVERT(char(8), GETDATE(), 112)
and ahuvdt >= CONVERT(char(8), GETDATE(), 112)
and aisagl = 20 and aigrpi = 40
and aifvdt < CONVERT(char(8), GETDATE(), 112)
and aiuvdt >= CONVERT(char(8), GETDATE(), 112)
order by ajfvdt desc) as 'EK-Preis',
(select TOP 1 ajfrqt
from RCE12_Staging.dbo.mpagrp
left outer join RCE12_Staging.dbo.mpagrh on ajcono = ahcono
and ajagnb = ahagnb and ajsuno = ahsuno
left outer join RCE12_Staging.dbo.mpagrl on ajcono = aicono
and ajagnb = aiagnb and ajsuno = aisuno
where ajcono = 2 and ajobv1 = mbitno
and ajsuno = mbsuno and ajmapr = 1 and ajgrpi = 40
and ajfvdt < CONVERT(char(8), GETDATE(), 112) and ahpast = '40'
and ahfvdt < CONVERT(char(8), GETDATE(), 112)
and ahuvdt >= CONVERT(char(8), GETDATE(), 112) and aisagl = 20
and aigrpi = 40
and aifvdt < CONVERT(char(8), GETDATE(), 112)
and aiuvdt >= CONVERT(char(8), GETDATE(), 112)
order by ajfvdt desc) as 'EK-Menge'
FROM
RCE12_Staging.dbo.MITBAL MITBAL
left outer join
RCE12_Staging.dbo.MITFAC MITFAC ON mbcono = m9cono and mbitno = m9itno and m9faci = 'DFP'
left outer join
RCE12_Staging.dbo.MITMAS MITMAS ON mbcono = mmcono and mbitno = mmitno
left outer join
RCE12_Staging.dbo.CIDMAS CIDMAS ON mbcono = idcono and mbsuno = idsuno
left outer join
RCE12_Staging.dbo.CIDVEN CIDVEN ON mbcono = iicono and mbsuno = iisuno
WHERE
MITBAL.MBCONO = 2
AND MITBAL.MBWHLO = '200' AND MBSTAT = '20' AND MBPUIT = '2'
and MBITNO like '479200222%'
ORDER BY MBITNO
へようこそStackOverflow:コード、XML、またはデータサンプルを投稿する場合、**これらの行をテキストエディタで強調表示し、エディタツールバーの[コードサンプル]ボタン( '{}')をクリックしてくださいフォーマットと構文はそれを強調する! –
この文を実行しても「TOP 1」を削除すると結果が表示されますか?もしそうなら、問題はあなたの質問であり、「TOP 1」ではありません。 – Fermin
また、問題が発生していることを示す最小限のクエリに**問題を減らしてください**。これらのWHERE条件とSELECT TOP 1サブクエリの10個のサンプルをすべて必要としません - **問題を表示するように減らしてください - 読みにくいそうした膨大なクエリをダンプしないでください私たちに...... –