首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传递参数时过滤a,不传递参数时返回all

传递参数时过滤a,不传递参数时返回all
EN

Stack Overflow用户
提问于 2014-11-11 00:27:34
回答 2查看 25关注 0票数 1

如何在传递参数时过滤查询中的记录,并在参数为空值时返回all。

代码语言:javascript
复制
SELECT nfv.Company_id, COUNT(1) as NegativeFeedback,SUM(allocated_score) as ScoreSum
FROM dbo.NegativeFeedbackView nfv
WHERE ISNULL(nfv.comp_nature_id,0) = @compNatureId 
GROUP BY nfv.Company_id
EN

回答 2

Stack Overflow用户

发布于 2014-11-11 00:41:18

使用IF/ELSE

例如:

代码语言:javascript
复制
IF @compNatureId IS NULL
BEGIN

    SELECT nfv.Company_id, COUNT(1) as NegativeFeedback,SUM(allocated_score) as ScoreSum
    FROM dbo.NegativeFeedbackView nfv
    WHERE ISNULL(nfv.comp_nature_id,0) = @compNatureId 
    GROUP BY nfv.Company_id

END
ELSE
BEGIN

    SELECT nfv.Company_id, COUNT(1) as NegativeFeedback,SUM(allocated_score) as ScoreSum
    FROM dbo.NegativeFeedbackView nfv
    GROUP BY nfv.Company_id

END

尝试将这些情况组合到一个查询中:

代码语言:javascript
复制
SELECT nfv.Company_id, COUNT(1) as NegativeFeedback,SUM(allocated_score) as ScoreSum
FROM dbo.NegativeFeedbackView nfv
WHERE ISNULL(nfv.comp_nature_id,0) = @compNatureId 
OR @compNatureId IS NULL
GROUP BY nfv.Company_id

可能会产生一个次优的计划,并且它不能在comp_nature_id上使用任何索引(如果存在)。

票数 1
EN

Stack Overflow用户

发布于 2014-11-11 00:30:50

下面是一个使用可选参数进行过滤的示例proc。

代码语言:javascript
复制
CREATE PROCEDURE USP_MyProc(@FilterParameter AS VARCHAR(100) = NULL)

BEGIN

SELECT nfv.Company_id, COUNT(1) as NegativeFeedback,SUM(allocated_score) as ScoreSum
FROM dbo.NegativeFeedbackView nfv

WHERE
(@compNatureId  IS NULL OR ISNULL(nfv.comp_nature_id,0)= @compNatureId )

GROUP BY nfv.Company_id

END
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26848340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档