(有没有办法编写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技能非常有限。那么请你帮我解决这个问题..非常感谢你。
答案 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)
我认为最简单的方法是编写存储过程,您可以在下面查看链接
快乐的编码!!!