首页 > 解决方案 > SQL - 在 WITH 语句之后使用 IF 语句

问题描述

我正在制作一个 SQl 报告,它使用 With 语句,并带有很多内部连接和组等。

请参阅下面的工作代码。下面的代码确实有效。

问题是,这个表有时会有输出数据(作为一个表),有时不是基于订单量。当没有找到数据时,我想显示我自己的特定信息,说“不需要购买托盘”

我想在原始队列之后放置一个 IF 语句,例如:

IF NewTable is not NULL
  select 
  WorkOrderNumber,
  DispatchDayID,
  sum (NewTable.Qty)as Qty,
  A,
  B,
  PalletDesign
  from NewTable 
  group by WorkOrderNumber,DispatchDayID,A,B,PalletDesign

ELSE 
  select 'dont need to buy pallet'
END

但是,如果我包含上面的代码,队列不会运行,有人可以告诉我如何将 IF 语句放在 With as 和 Select 之后。

(不是 SQL 专家,如果我的问题不完全合理,请见谅)

-------------工作代码------------

with NewTable as (

Select 

d.WorkOrderNumber AS WorkOrderNumber,
d.DispatchDayID AS DispatchDayID,
......
.....
....

from Company_OrderDispatchPallet a 

inner join Company_orderDispatchPalletitem b

on a.orderDispatchPalletID = b.orderDispatchPalletID

inner join ......
on ......

inner join ......
on ......

where 
g.PurchasedDate >= dATEADD(hh, +22, cast (CAST(GETDATE()-1 AS DATE) as datetime)) 
and g.PurchasedDate <= dATEADD(hh, +22, cast (CAST(GETDATE()-0 AS DATE) as datetime))  

group by 
a.OrderDispatchid, b.orderItemGuid,c.OrderDispatchID,d.DispatchItemId,
...... )  

-- 新表结束

select 
WorkOrderNumber,
DispatchDayID,
sum (NewTable.Qty)as Qty,
A,
B,
PalletDesign

from NewTable 

group by WorkOrderNumber,DispatchDayID,A,B,PalletDesign

标签: sql

解决方案


SQL 不是一种执行类似逻辑操作的语言,因为它是声明性的而不是过程性的。

但是,一些数据库系统将提供过程支持,并且可能具有如下语法:

BEGIN
    DECLARE @check INT;

    SELECT 
        @check = COUNT(1)
    FROM
        NewTable;

    SELECT @check;

    IF @check >= 1
    BEGIN
       select 
       WorkOrderNumber,
       DispatchDayID,
       sum (NewTable.Qty)as Qty,
       A,
       B,
       PalletDesign
       from NewTable 
       group by WorkOrderNumber,DispatchDayID,A,B,PalletDesign
    END
    ELSE
    BEGIN
        PRINT 'dont need to buy pallet';
    END
END

推荐阅读