SQL-基于Where查询运行Select语句

SQL-基于Where查询运行Select语句,sql,tsql,Sql,Tsql,嗨,我想创建一个执行以下操作的查询。当选择参数25时,它只运行查询的A部分,如果选择了任何其他数字,则运行表A和B select查询 示例如下: DECLARE @Type varchar (200) select * from (SELECT sort_code FROM dbo.Test 1 WHERE FUNDING_YEAR = 26) union (SELECT sort_code FROM dbo.Test 2 WHERE FUNDING_YEAR = 26) Whe

嗨,我想创建一个执行以下操作的查询。当选择参数25时,它只运行查询的A部分,如果选择了任何其他数字,则运行表A和B select查询

示例如下:

DECLARE @Type varchar (200)

select * from 

(SELECT sort_code FROM dbo.Test 1
 WHERE FUNDING_YEAR = 26)



union
(SELECT sort_code FROM dbo.Test 2
 WHERE FUNDING_YEAR = 26)
Where case when @Type = 25 then select * from table2 else table 1

您只需要引用
WHERE
子句中的变量

SELECT *
FROM TableA
WHERE @Type = 25

UNION

SELECT *
FROM TableB

上面的查询将始终选择TableB中的所有内容,并且仅在变量等于25时选择TableA中的所有内容。

因为您使用的是SSRS,所以我要做的是编写查询以返回所有行,然后在参数为25时在SSRS报告中应用过滤器。我不会将paramater值传递给SQL端,除非它大大减少了查询的运行时间


(我会把它放在评论中。)

样本数据、期望的结果和适当的数据库标签都会有帮助。我会在SSRS报告中使用这个查询。因此,在SSRS报告中,如果您选择@type=25,那么它将只运行“select*from table2 else table 1”,否则从表2I将作为存储过程写入,您可以传递类型和融资年的参数。。。如果参数类型为25,则返回一个结果,否则返回另一个结果。为什么在SQL查询中选择此方法而不是筛选?它有什么好处?它更像是一种筛选数据的方法。我们有一位SSRS作家,他可以同时做到这两个方面。他会向查询发送一个参数,然后在报告中进一步过滤它。@Bains21所讨论的特定场景,最好的做法是引入所有数据,然后过滤报告,因为有时他需要所有数据,有时不需要。我不同意这是最好的选择。每次用户更改参数并再次运行报告时,所有数据都必须通过网络路由。无论您在上面的注释中返回多少数据,当存在大量数据时,使用参数限制数据量是正确的。我不会用10年的销售数据来过滤它,你是正确的。我在最初的评论中提到了这一点。在Bains21这个特定的例子中,我不得不假设sort_代码是相对较少的记录,不会产生过多的网络流量。谢谢你只是考虑了一下这个任务,这就解决了它。谢谢