こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

日付範囲の取得     早めにお願い!

データを取得したいです

SQLで2004/10/01と2004/10/11が入力されてないときに
選択したデータが取れるようにしたいんですがどうしたらいいですか。
丁度WHERE分のところですが

SQL Server Management Studio Express使用

select
'1' as 端末番号,
受注残.*,
取引先.取引先略名,
担当者.担当者番号,
担当者.担当者名,
区分明細.区分明細名,
区分明細1.区分明細名,
区分明細2.区分明細名,
取引先1.取引先略名 as 取引先略名1,
受注残.品目分類,
名称.名称名,
'2',
'3'
from 受注残
LEFT JOIN 取引先 on 受注残.得意先番号 = 取引先.取引先番号
LEFT JOIN 担当者 on 受注残.売上担当者 = 担当者.担当者番号
LEFT JOIN 区分明細 On ( 受注残 .受注伝票区分 = 区分明細.区分明細番号)
LEFT JOIN 区分明細 as 区分明細1 On (受注残.仮単価区分 = 区分明細1.区分明細番号)
LEFT JOIN 区分明細 as 区分明細2 On (受注残.完納区分 = 区分明細2.区分明細番号)
LEFT JOIN 取引先 as 取引先1 on (受注残.得意先番号 = 取引先.取引先番号 )
left join 名称 on 受注残.品目分類 = 名称.名称番号
where ('00001' = '99999' OR ('00001' <> '99999' AND 受注残.工場番号 = '00001'))
AND 受注残.受注日 >= '2004/10/01'
AND 受注残.受注日 <= '2004/10/11'
AND 受注残.受注日 between '2004/10/01' and '2004/10/11'
AND (区分明細.区分番号 = '01' Or 区分明細.区分番号 Is Null)
AND (区分明細1.区分番号 = '40' Or 区分明細1.区分番号 Is Null)
AND (区分明細2.区分番号 = '10' Or 区分明細.区分番号 Is Null)
AND 取引先1.取引先番号 = '00001'
AND 受注残.得意先番号 = '143500-03'
and 名称.区分番号 like '%65%'
and 名称.名称番号 like '%'+'0010'+'%'
order by
受注残.工場番号,
受注残.受注日,
受注残.品目番号

投稿日時 - 2008-12-27 01:01:57

QNo.4585800

すぐに回答ほしいです

質問者が選んだベストアンサー

2つの日付が未入力のときには、SQLには''(ブランク)が渡されて、
AND 受注残.受注日>=''
AND 受注残.受注日<=''
となってしまい、結果何もデータが返ってこないので、
他に指定した条件に合致するデータを返したい
とこういうことでいいですか?

最初に、以下の部分は条件が重複しているので、片方だけにしてください。
AND 受注残.受注日 >= '2004/10/01'
AND 受注残.受注日 <= '2004/10/11'
AND 受注残.受注日 between '2004/10/01' and '2004/10/11'

1)テーブルの受注日が必須項目であれば、
AND 受注残.受注日>=ISNULL(NULLIF(CONVERT(varchar,'2004/10/01'),''),'1900/01/01')
AND 受注残.受注日<=ISNULL(NULLIF(CONVERT(varchar,'2004/10/11'),''),'2099/12/31')
と書くことで、2004/10/01と2004/10/11が入っていないときには、代わりに1900/01/01と2099/12/31が渡されるので、受注日以外の条件に合致するものが返されます。

もしくは、
AND 受注残.受注日>=(CASE WHEN '2004/10/01'='' THEN '1900/01/01' ELSE '2004/10/01' END)
AND 受注残.受注日<=(CASE WHEN '2004/10/11'='' THEN '1900/01/01' ELSE '2004/10/11' END)

2)他に書いているようにやってもいいです。
AND ('2004/10/01'='' OR 受注残.受注日>='2004/10/01')
AND ('2004/10/11'='' OR 受注残.受注日>='2004/10/11')

3)見たところ、VBか何かで組み立てたSQL文をそのまま貼っただけのようですね。
それなら、日付の条件がブランクなら日付の条件いれなくてもいいのでは。

If strDateF<>"" THEN strSql=strSql+"AND 受注残.受注日>='" & strDateF & "'"

投稿日時 - 2008-12-27 21:15:43

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)