我确信这是一个简单的问题,但我想知道如何声明不同的变量,以便它们成为where子句的一部分,具体取决于用户选择的内容?
例如,我有一个带有组合框的Excel电子表格,其中包含从数据库(美国,英国,澳大利亚)提取的国家/地区列表,具体取决于用户选择的国家/地区将会过滤并过滤该数据。问题出现在数据表中,查询从值(US,UK,AU)中拉回结果。
也许我可以构建映射表?我确信我可以使用declare来做到这一点。
非常感谢任何有关构建此方法的最佳方法的建议。
答案 0 :(得分:2)
我认为你所要求的是
SELECT tbl.*
FROM tbl
WHERE col1 = CASE WHEN @param='United Kingdom' THEN 'UK' ... END
您可能需要考虑的是查找表
SELECT tbl.*
FROM tbl
JOIN loc ON loc.id = tbl.loc_id
WHERE loc.name = @param
答案 1 :(得分:1)
您可以在表格中添加一个具有完整国家/地区名称值的LongName列。
另一个选择是拥有一个单独的Country表,将您的其他表更改为引用CountryID作为外键(而不是具有UK,US等列),并让您的国家/地区表具有ShortName(例如UK,美国,AU)和LongName(例如英国,美国,澳大利亚)专栏。然后,您可以加入国家/地区表格以获取完整的国家/地区名称。
答案 2 :(得分:1)
最简单的方法: 创建一个新的数据集并将其存储在某个地方(例如,进入临时塔),然后声明变量并使用数据集作为它的数据源。
declare @Country as varchar(50)
使用where子句中的变量来过滤结果集:
Select tbl.*
from tbl tbl
where tbl.country = @Country
在您的情况下,组合框应基于您在过滤期间要使用的值。这就是为什么你可以使用类似的东西:
select distinct tbl.country
from table tbl
并将生成的结果用作DropDown的源
另一种方法是使用CASE
,case when country = 'Australia' then 'AU'
, case when country = 'United Kingdom' then 'UK'
.....
由于