使用declare排除或包含部分查询

时间:2016-09-05 10:18:36

标签: sql sql-server tsql

我只是想知道是否可以排除或包含查询的部分内容。 通过将变量声明为是或否。这将使事情变得更容易,然后声明每个值,例如' IN'子句。

下面说明的例子

起点

SELECT 
    E.Id, E.Name
FROM 
    Employees AS E
WHERE 
    E.Email LIKE '%@company.com'
    AND E.Id NOT IN ('1001,1002,1009,1115,2000')
    AND E.Team = 0

理想情况

DECLARE @Includemanagers nvarchar (255) = 'No'

SELECT 
    E.Id, E.Name
FROM 
    Employees AS E
WHERE 
    E.Email LIKE '%@company.com'
    AND CASE 
           WHEN @Includemanagers = 'No' 
              THEN E.Id NOT IN ('1001,1002,1009,1115,2000') 
        END
    AND E.Team = 0

我知道语法不正确。我怀疑这是否可能。

  

将来提供两个正确的答案供参考。

     

如果您不想包含PRINT语句

,请使用@Jamiec的答案      

如果要包含print语句

,请使用@Prdp的答案

3 个答案:

答案 0 :(得分:2)

这是一个简单的class Bar extends Component { constructor() { this.styles = StyleSheet.create({ ... }); } render: { return ( /* use this.styles here */ ); } } 条件

OR

(请注意,引用了您的DECLARE @Includemanagers nvarchar (255) = 'No' SELECT E.Id, E.Name FROM Employees AS E WHERE E.Email LIKE '%@company.com' AND (@IncludeManagers = 'yes' OR (@IncludeManagers = 'no' AND E.Id NOT IN (1001,1002,1009,1115,2000 )) AND E.Team = 0 子句,但这不起作用。在此答案中进行了更正)

答案 1 :(得分:1)

使用条件声明:IF

IF @Includemanagers <> 'No' 
  BEGIN 
       PRINT 'Managers are included in this query' 
       SELECT E.id, 
              E.NAME 
       FROM   employees AS E 
       WHERE  E.email LIKE '%@company.com' 
         AND E.team = 0 
  END 
ELSE 
  BEGIN 
      SELECT E.id, 
             E.NAME 
      FROM   employees AS E 
      WHERE  E.email LIKE '%@company.com' 
             AND E.id NOT IN ( 1001, 1002, 1009, 1115, 2000 ) 
             AND E.team = 0 
  END 

答案 2 :(得分:0)

我不确定这是否与您完全相同,但您可以使用CASE函数执行此类操作:

DECLARE @Includemanagers nvarchar (255) = 'No'

SELECT 
    E.Id, E.Name
FROM 
    Employees AS E
WHERE 
    E.Email LIKE '%@company.com'
    AND 1 = CASE 
           WHEN @Includemanagers = 'No' 
              CASE WHEN  E.Id NOT IN (1001,1002,1009,1115,2000) THEN 1 ELSE 0 END
            ELSE 1 
        END
    AND E.Team = 0