我正在使用Declare / Set子句来简化查询。其中一个领域包括多个部门。有时,我可能想要限制一个department_id,有时我想要多个部门。是否可以将@dept设置为包含多个部门ID?
declare @enddate datetime, @startdate datetime, @dxstartdate datetime, @dxenddate datetime,@ageanchor datetime,@activestart datetime, @activeend datetime, @dept numeric (18,0)
SET @enddate='2016-05-31'
SET @startdate = '2015-06-01'
SET @dxstartdate = '2015-06-01'
SET @dxenddate = '2016-05-31'
SET @ageanchor = '2016-05-31'
SET @activestart = '2014-06-01'
SET @activeend = '2016-05-31'
***SET @dept = in "dept1', 'dept2' ???(What do I put here?)***
答案 0 :(得分:0)
一种选择是将@dept
设置为VARCHAR(MAX)
,以便您可以接纳任意数量的部门。然后,SET @dept = 'dept1,dept2,dept3'
。现在,您有一个以逗号分隔的列表变量,您可以将其拆分为一列,并在代码中添加JOIN
。首先,您需要一个函数将此逗号分隔列表转换为表格。请参阅:How to validate a comma separated string using array in SQL我发布了一个函数来执行此操作,除非您使用的是SQL 2016,在这种情况下,您可以使用STRING_SPLIT()
。无论哪种方式,您最终都会在INNER JOIN
语句中使用SELECT
部分的一系列部门来过滤您的数据。