1
我在3個表「table1」,「table2」,「tableMap」上寫了一個查詢。基於下拉列表中的選定值。但我沒有得到預期的結果。請幫忙。帶有多個過濾器的SQL Server查詢
下拉1:
<Promo Name>
- All - value = ""
- ABC - value = "1"
- XYZ - value = "2"
下拉2:
<Store Type>
- All - value = ""
- Type 1 - value = "1"
- Type 2 - value = "2"
下拉3:
<Store Area>
- All - value = ""
- Area 1 - value = "1"
- Area 2 - value = "2"
表1:
ID | Store Name | Store Address | Store Type | Store Area
---+------------+---------------+------------+-----------
1 | ABC | 112 test road| Type 1 | Area 1
2 | XYZ | 22 test2 road| Type 2 | Area 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
爲[存儲類型]和[存儲區]的值是的ID [表1] 因此,在下面的查詢,我們應將[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)))
結果 - 預期 - (但不是因爲我沒加上面,而不是位置表知道如何添加它上面的查詢工作):
Promo Name | Store Name | Address
-----------+------------+---------------
promo 1 | ABC | 112 test road
promo 2 | ABC | 112 test road
感謝您提供格式良好的示例。我在查詢中沒有看到表2。我看到t2的前綴爲值,但我沒有在from或join子句中看到它。 –
希望'promo 2'在您想要的結果中與'ABC'相關聯的邏輯是什麼? –
如果您可以修改「表格映射」的性質,以便它不包含商店類型ID的csv列表。每次促銷與特定區域或商店類型相關聯時,都會創建一個新行。這會讓你的生活更輕鬆。 – Greenspark