1

我确信这是一个简单的问题,但我想知道如何声明不同的变量,以便它们成为 where 子句的一部分,具体取决于用户选择的内容?

因此,例如,我有一个 Excel 电子表格,其中有一个组合框,其中列出了从数据库(美国、英国、澳大利亚)中提取的国家/地区列表,具体取决于用户选择的内容,它将关闭并过滤该数据。问题出在数据表中,查询从值中拉回结果是(美国、英国、澳大利亚)。

也许我可以建立一个映射表?我只是确定我可以通过使用声明来做到这一点。

任何关于构建它的最佳方式的建议将不胜感激。

4

3 回答 3

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
于 2013-10-23T15:07:29.063 回答
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'
.....

谢谢

于 2013-10-23T15:48:45.000 回答
1

您可以将 LongName 列添加到您的表中,该列将具有完整的国家/地区名称值。

另一种选择是有一个单独的 Country 表,更改您的另一个表以引用 CountryID 作为外键(而不是具有 UK、US 等的列),并让您的国家表具有 ShortName(例如 UK、US、AU ) 和 LongName(例如英国、美国、澳大利亚)列。然后您可以加入国家/地区表以获取完整的国家/地区名称。

于 2013-10-23T15:19:13.720 回答