Mid TemplateId FilterName MappingValue
----- ---------- ------------- --------------
1 1 JobCode DC123
2 1 ServiceType Paid
3 1 SegmentType New
4 2 JobCode DC123
5 2 SegmentType New
6 3 ServiceType Paid
我正在编写一个存储过程以从上表中获取数据。
输入参数为:
JobCode, ServiceType, SegmentType
如果要为上述组合找到任何记录,我想从上表中获取唯一的templateId
,如果没有,则应该为templateId
和JobCode
返回ServiceType
,并且如果也未找到,则应寻找SegmentType
。
示例:
如果JobCode = DC123
,ServiceType = Paid
和SegmentType = New
,则代码应返回TemplateId = 1
如果JobCode = DC123
,ServiceType = Free
和SegmentType = New
,则代码应返回TemplateId = 2
如果JobCode = DC123
,ServiceType = Paid
和SegmentType = Old
,则代码应返回TemplateId = 3
答案 0 :(得分:0)
这是您可以使用的汇总查询:
CREATE PROCEDURE [dbo].[sp_yourproc]
@jobCode varchar(100),
@serviceType varchar(100),
@segmentType varchar(100)
AS
BEGIN
DECLARE @templateId int
SET @templateId = (SELECT TemplateId FROM yourTable GROUP BY TemplateId
HAVING
(MAX(CASE WHEN FilterName = 'JobCode' THEN MappingValue END) = @jobCode OR
@jobCode IS NULL) AND
(MAX(CASE WHEN FilterName = 'ServiceType' THEN MappingValue END) = @serviceType OR
@serviceType IS NULL) AND
(MAX(CASE WHEN FilterName = 'SegmentType' THEN MappingValue END) = @segmentType OR
@segmentType IS NULL);
-- do something with the @templateId
END
在存储的proc上下文中,您可能不想检查所有三个过滤器名称。在这种情况下,我将NULL
输入参数视为有效,这意味着可以根据需要省略三个输入中的任何一个。