sql - 通过多个选择/下拉列表过滤我的结果,每个选择/下拉列表将接受多个值
问题描述
我有多个下拉菜单
- 省
- 区
- 特希尔
All 可以选择多个值,默认情况下全选。
现在我想编写一个高效的 SQL 查询来完成工作。我正在考虑使用where col in ()
语句,但是当我没有传递任何值时,它会导致错误。
什么是完成给定结果的更好方法。
需要更新以获取更多信息
我正在开发一个仪表板,其中我的图表需要对选择多种功能的多个下拉列表(过滤器)进行反应,并且我假设where col in ()
子句可以支持我。唯一的问题是在使用此子句时,它不能为空,因为在未应用过滤器时无法从 SQL 服务器获取数据。
解决方案
我通过阅读这篇文章arrays-in-sql找到了解决方案
eg: 省 = [1,2,3], 地区 = [1,2,3] 首先将省和地区转换为像省 = '1,2,3' 这样的字符串创建过程,参数如下
CREATE PROC myFilterTable ( @province AS VARCHAR ( 50 ) = NULL,@district AS VARCHAR ( 50 ) = NULL ) AS BEGIN
SELECT
*
FROM
myTable
WHERE
( @province IS NULL OR province_id IN ( SELECT CONVERT ( INT, VALUE ) FROM string_split ( @province, ',' ) ) )
AND ( @district IS NULL OR district_id IN ( SELECT CONVERT ( INT, VALUE ) FROM string_split ( @district, ',' ) ) )
END
现在执行:
exec myFilter '1,2', '1,3'
推荐阅读
- vb.net - 如何使用按钮打印具有文本框和图形的 TabPage?
- git - Git:有一个文件显示它是否已更改,无论我是否删除它,我怎样才能让它保持不变?
- java - 在 JList 中显示文件对象的简单名称
- c - 链表 - 命令行参数
- python - 在无 Internet 的服务器上复制 python Anaconda 库
- javascript - 如果我不调用调度,我的动作是如何调度的?
- php - 从 url 获取元标记的替代方法
- f#-giraffe - 在视图中显示整数
- docker - Airflow Docker Operator 无法在本地机器上找到 .sock 文件
- mysql - 在时间序列数据表中为每个 ID 子组添加缺失的日期记录