Sql server 具有多个筛选器的SQL Server查询

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

我正在写一个关于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 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)))