【问题标题】:How to retrun value 1 or 2 or both conditons SQL如何返回值 1 或 2 或两个条件 SQL
【发布时间】:2020-12-01 13:39:15
【问题描述】:

在存储过程中有一个名为 @detaiResultTable 的表变量,这是存储过程的一部分,以及我如何将数据插入到该表变量中。

INSERT INTO @detaiTable 
SELECT b.branchid, 
       sp.fkserviceid, 
       Count(sp.fkserviceid) AS ServiceCount 
FROM   location l 
       INNER JOIN @Branches br 
               ON l.fkbranchid = br.branchid 
WHERE  l.addedlocaltime >= @startDate 
       AND sp.servicetime IS NOT NULL 
GROUP  BY b.branchid, 
          sp.fkserviceid 

我需要检查另一个名为 @fkTypeID 的标志,它的值可以是 1、2 或 0

  • @fkTypeID = 1需要检索fkTypeID = 1数据时
  • @fkTypeID = 2需要检索fkTypeID = 2数据时
  • @fkTypeID = 0需要检索fkTypeID = 1 and 2数据时

新引入的flag如下,

INSERT INTO @detaiTable 
SELECT b.branchid, 
       sp.fkserviceid, 
       Count(sp.fkserviceid) AS ServiceCount 
FROM   location l 
       INNER JOIN @Branches br 
               ON l.fkbranchid = br.branchid 
WHERE  l.addedlocaltime >= @startDate and fkTypeID = @fkTypeID
and sp.ServiceTime is not null
GROUP  BY b.branchid, 
          sp.fkserviceid 

最短的方法是什么,我打算这样做。

IF @fkTypeID = 0 
  BEGIN 
      INSERT INTO @detaiTable 
      SELECT b.branchid, 
             sp.fkserviceid, 
             Count(sp.fkserviceid) AS ServiceCount 
      FROM   location l 
             INNER JOIN @Branches br 
                     ON l.fkbranchid = br.branchid 
      WHERE  l.addedlocaltime >= @startDate 
             AND sp.servicetime IS NOT NULL 
      GROUP  BY b.branchid, 
                sp.fkserviceid 
  END 
ELSE 
  BEGIN 
      INSERT INTO @detaiTable 
      SELECT b.branchid, 
             sp.fkserviceid, 
             Count(sp.fkserviceid) AS ServiceCount 
      FROM   location l 
             INNER JOIN @Branches br 
                     ON l.fkbranchid = br.branchid 
      WHERE  l.addedlocaltime >= @startDate 
             AND fktypeid = @fkTypeID 
             AND sp.servicetime IS NOT NULL 
      GROUP  BY b.branchid, 
                sp.fkserviceid 
  END 

但问题是,在我的 SP 中有多个这样的表变量。所以如果我写这个代码。它将在我的 SP 中生成大量代码。请帮帮我。

【问题讨论】:

    标签: sql sql-server stored-procedures where-clause


    【解决方案1】:

    表达逻辑的一种简单方式是:

    where (@fkTypeID = fkTypeID or @fkTypeId = 0)
    

    请注意,在存储过程中,如果fkTypeID 用于索引或分区,这可能会影响查询的性能。发生的情况是查询是使用参数的第一个值编译的——这对于其他值可能不是最优的。

    但是,对于类型 id 只有两个值,这可能不会产生太大影响,因此性能可能不会受到影响。

    【讨论】:

    • @Sachith 仅供参考,在这里使用“Dude”可以被视为相当粗鲁。
    猜你喜欢
    • 1970-01-01
    • 2015-01-20
    • 2016-12-26
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 2016-07-14
    相关资源
    最近更新 更多