Sql server 具有多个筛选器的SQL Server查询
我正在写一个关于3个表“table1”、“table2”、“tableMap”的查询。基于下拉列表中的选定值。但我没有得到预期的结果。请帮忙 下拉列表1:Sql server 具有多个筛选器的SQL Server查询,sql-server,stored-procedures,inner-join,Sql Server,Stored Procedures,Inner Join,我正在写一个关于3个表“table1”、“table2”、“tableMap”的查询。基于下拉列表中的选定值。但我没有得到预期的结果。请帮忙 下拉列表1: <Promo Name> - All - value = "" - ABC - value = "1" - XYZ - value = "2" 表2: ID | Promo Name ---+------------ 1 | promo 1 2 | promo 2 表格地图: ID | Promo I
<Promo Name>
- All - value = ""
- ABC - value = "1"
- XYZ - value = "2"
表2:
ID | Promo Name
---+------------
1 | promo 1
2 | promo 2
表格地图:
ID | Promo ID | Store Type | Store Area
---+------------+----------------+------------+-----------
1 | 1 | 2,1 |
2 | 2 | | 1
[Store Type]和[Store Area]的值是[表1]的ID
因此,在下面的查询中,我们应该将[Store Type]/[Store Area]映射为[Table 1]的[ID]
我正在尝试编写一个查询,以便根据下拉选择的值得到结果
查询:
declare @promoname varchar(255),
@type varchar(255),
@area varchar(255)
select
t2.Promo Name, t2.ID, t1.Store Name, t1.Store Address
from
[Tablemap] tm
inner join
[Table2] t2 on tm.Promo ID = t2.ID
where
(@promoname = '' or t2.[promoname] = @promoname)
and (@type = '' or @type in (select [name]
from dbo.SplitString (tm.Store Type)))
结果-预期-(但不处理上述查询,因为我没有在上面添加位置表,也不确定如何添加它):
请尝试下面的代码
declare @promoname varchar(255),
@type varchar(255),
@area varchar(255)
select t2.Promo Name, t2.ID, t1.Store Name, t1.Store Address
from
[Tablemap] tm
inner join [Table2] t2 on tm.Promo ID = t2.ID
inner join [Table1] t1 on tm.Promo ID = t1.ID
where (@promoname = '' or t2.[promoname] = @promoname)
and (@type = '' or t1.[Store Type] in (select [name] from dbo.SplitString (tm.Store Type)))
感谢您提供格式良好的示例。我在您的查询中没有看到表2。我看到t2作为值的前缀,但我在from或join子句中没有看到。在所需结果中希望
promo 2
与ABC
关联的逻辑是什么?如果可以,您应该修改“表映射”的性质,使其不包含存储类型ID的csv列表。每次促销与特定区域或商店类型关联时,都要创建一个新行。这会让你的生活更轻松。
ID | Promo ID | Store Type | Store Area
---+------------+----------------+------------+-----------
1 | 1 | 2,1 |
2 | 2 | | 1
declare @promoname varchar(255),
@type varchar(255),
@area varchar(255)
select
t2.Promo Name, t2.ID, t1.Store Name, t1.Store Address
from
[Tablemap] tm
inner join
[Table2] t2 on tm.Promo ID = t2.ID
where
(@promoname = '' or t2.[promoname] = @promoname)
and (@type = '' or @type in (select [name]
from dbo.SplitString (tm.Store Type)))
Promo Name | Store Name | Address
-----------+------------+---------------
promo 1 | ABC | 112 test road
promo 2 | ABC | 112 test road
declare @promoname varchar(255),
@type varchar(255),
@area varchar(255)
select t2.Promo Name, t2.ID, t1.Store Name, t1.Store Address
from
[Tablemap] tm
inner join [Table2] t2 on tm.Promo ID = t2.ID
inner join [Table1] t1 on tm.Promo ID = t1.ID
where (@promoname = '' or t2.[promoname] = @promoname)
and (@type = '' or t1.[Store Type] in (select [name] from dbo.SplitString (tm.Store Type)))