1

(このステートメントがデータを取得できない場合(テーブルの一部がnullであったため)、他のSQLステートメントを使用するか、利用可能なデータのみを表示するSQLステートメントを作成する方法はありますか?)

以下に示す生産ロットと最新のアクティビティのそれぞれを表示するSQLステートメントがあります...

q_maxdate :

SELECT 
    tbl_pdtn_startup.pdtn_st_id, 
    tbl_production.pdtn_id, 
    tbl_product.pd_name
FROM 
    (
        tbl_pdtn_startup 
        INNER JOIN tbl_product 
        ON tbl_pdtn_startup.pd_id = tbl_product.pd_id
    ) 
    INNER JOIN tbl_production 
    ON tbl_pdtn_startup.pdtn_st_id = tbl_production.pdtn_st_id;

このSQLと結合する

SELECT 
    q_maxdate.pdtn_st_id, 
    Sum(tbl_pdtn_sizecolor.pdtn_st_qty_est) AS SumOfpdtn_st_qty_est,
    q_maxdate.MaxOfpdtn_date, 
    q_maxdate.pd_name, 
    q_maxdate.pdtn_st_pdNote, 
    q_maxdate.pd_id, 
    q_maxdate.MaxOfwk_stage, 
    q_maxdate.LastOflb_name, 
    q_maxdate.pdtn_st_date, 
    q_maxdate.pdtn_st_qty_act
FROM 
    q_maxdate 
    INNER JOIN tbl_pdtn_sizecolor 
    ON q_maxdate.pdtn_st_id=tbl_pdtn_sizecolor.pdtn_st_id
GROUP BY 
    q_maxdate.pdtn_st_id, 
    q_maxdate.MaxOfpdtn_date, 
    q_maxdate.pd_name, 
    q_maxdate.pdtn_st_pdNote, 
    q_maxdate.pd_id, 
    q_maxdate.MaxOfwk_stage, 
    q_maxdate.LastOflb_name, 
    q_maxdate.pdtn_st_date, 
    q_maxdate.pdtn_st_qty_act
ORDER BY 
    q_maxdate.pdtn_st_date DESC;

これの問題は、tbl_pdtn_startup にデータのみがあり、tbl_production に null があるレコードが表示されないことです。したがって、このケースが発生した場合、利用可能なデータのみを表示する新しい SQL ステートメントを実行する必要があります。

のようなもの ... if sql1 <> "" then sql1 を実行する else sql2 を実行する end if

どうもありがとうございます

(編集済み)以下の回答によると、次のように使用してこの問題を解決するために「IF NOT EXIST」を選択しました。

IF NOT EXISTS (SELECT q_maxdate.pdtn_st_id, Sum(tbl_pdtn_sizecolor.pdtn_st_qty_est) AS SumOfpdtn_st_qty_est, q_maxdate.MaxOfpdtn_date, q_maxdate.pd_name, q_maxdate.pdtn_st_pdNote, q_maxdate.pd_id, q_maxdate.MaxOfwk_stage, q_maxdate.LastOflb_name, q_maxdate.pdtn_st_date, q_maxdate.pdtn_st_qty_act
FROM q_maxdate INNER JOIN tbl_pdtn_sizecolor ON q_maxdate.pdtn_st_id=tbl_pdtn_sizecolor.pdtn_st_id
GROUP BY q_maxdate.pdtn_st_id, q_maxdate.MaxOfpdtn_date, q_maxdate.pd_name, q_maxdate.pdtn_st_pdNote, q_maxdate.pd_id, q_maxdate.MaxOfwk_stage, q_maxdate.LastOflb_name, q_maxdate.pdtn_st_date, q_maxdate.pdtn_st_qty_act
ORDER BY q_maxdate.pdtn_st_date DESC ) 

THEN SELECT tbl_pdtn_startup.pdtn_st_id, tbl_product.pd_name, tbl_pdtn_startup.pdtn_st_date
    FROM (tbl_pdtn_startup INNER JOIN tbl_product ON tbl_pdtn_startup.pd_id = tbl_product.pd_id) INNER JOIN tbl_production ON tbl_pdtn_startup.pdtn_st_id = tbl_production.pdtn_st_id
    GROUP BY tbl_pdtn_startup.pdtn_st_id, tbl_product.pd_name, tbl_pdtn_startup.pdtn_st_date
    ORDER BY tbl_pdtn_startup.pdtn_st_date DESC 
END

しかし、うまくいきませんでした。私の SQL スキルは非常に限られていました。それで、これを解決するのを手伝ってくれませんか..どうもありがとう。

4

3 に答える 3

2

@@ROWCOUNT を使用して、sql1 によって返される行数を判断できます。行数が 0 の場合、おそらく何も返されないため、sql2 を使用します

IF NOT EXISTS を使用することもできます

于 2012-09-10T03:57:21.297 に答える
0

最も簡単な方法は、以下のリンクで確認できるストアドプロシージャを作成することだと思います。

http://www.databasejournal.com/features/msaccess/article.php/3407531/How-to-Execute-SQL-Stored-Procedures-from-Microsoft-Access.htm

ハッピーコーディング!!!

于 2012-09-10T13:01:16.223 に答える
0

これを行うにはいくつかの方法があります。

たとえば、Oracle PL/SQL と MSSQL T-SQL はどちらも「if-then-else」を許可します。

ただし、移植可能な方法は、ANSI-SQL の「case」ステートメントを使用することです。例えば:

于 2012-09-10T03:56:35.210 に答える