1

(有没有办法编写 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 中为空的记录。所以我想要的是,如果发生这种情况,然后执行只显示可用数据的新 SQL 语句。

类似于 ... if sql1 <> "" then execute sql1 else execute sql2 end if

非常感谢您

(已编辑)根据下面的答案,我选择了“如果不存在”来解决这个问题,方法如下:

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 返回了多少行。如果 rowcount 为 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 回答