有没有办法编写SQL语句,如果此语句无法检索数据,那么使用其他SQL语句?

时间:2012-09-10 03:52:42

标签: sql ms-access asp-classic

(有没有办法编写SQL语句,如果此语句无法检索数据(因为其表的某些部分为null),那么使用其他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语句,只显示可用的数据。

像......这样的......     如果sql1<> ""然后         执行sql1     其他         执行sql2     结束如果

非常感谢

(编者) 根据下面的答案我已经选择了#34;如果不存在"通过使用如下解决此问题:

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技能非常有限。那么请你帮我解决这个问题..非常感谢你。

3 个答案:

答案 0 :(得分:2)

您可以使用@@ ROWCOUNT来确定sql1返回的行数。如果rowcount为0,那么它可能没有返回任何内容,因此请使用sql2

你也可以使用IF NOT EXISTS

答案 1 :(得分:0)

有几种方法可以实现这一目标。

例如,Oracle PL / SQL和MSSQL T-SQL都允许“if-then-else”。

portable 方式是使用ANSI-SQL“case”语句。例如:

答案 2 :(得分:0)

我认为最简单的方法是编写存储过程,您可以在下面查看链接

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

快乐的编码!!!