我对SQL比较陌生 - 我不确定我是否正确行事。我添加了漂亮的照片。我有一个查询,我想填充一个参数(基于你通过下拉菜单输入的另一个参数,这是你看到的@ResponseRange var)
SELECT
CASE
WHEN crr.Name = 'Prescreens' THEN null
ELSE crr.Codes
END
FROM Client_Response_Ranges_for_SSRS_Respondent_Answer crr
where crr.Codes = @ResponseRange;
这就是crr表的外观(它只是查询的自定义表):
ResponseRange
更多信息:所以我有6个参数,它们是
BeginDate
EndDAte
SurveyID
SupplierID
ResponseRange
ClientResponseRange
问题是ClientResponseRange依赖于ResponseRange - 所以实际上ClientResponseRange是隐藏的。对于除一个之外的所有ResponseRange选项,我将自动使用ClientResponseRange的任何ResponseRange值。我做错了什么,但我不知道是什么......非常感谢任何提示。
答案 0 :(得分:3)
我想我知道你要做什么。我建议你将查询更改为:
SELECT
CASE
WHEN crr.Name = 'Prescreens' THEN null
ELSE crr.Codes
END
FROM Client_Response_Ranges_for_SSRS_Respondent_Answer crr
WHERE (@ClientResponseRange = 'All')
OR (@ClientResponseRange = 'Completes' AND crr.Codes IN (10,11,12 /* etc... */ )
OR (@ClientResponseRange = 'Over Quota' AND crr.Codes IN (40,42,43 /* etc... */ )
/* etc ... put the rest of your cases here */
然后你可以摆脱ResponseRange变量。
更好的解决方案是在数据库中建立一个表格,如:
CREATE TABLE CodesAndResponses (
CodeID INT,
ResponseRange VARCHAR(10)
)
INSERT INTO CodesAndResponses VALUES ('Completes', 10)
INSERT INTO CodesAndResponses VALUES ('Completes', 11)
--etc...
然后在您的查询中加入。这样,您就可以管理哪些代码与哪个类别相对应,而无需更改报告中的查询。
答案 1 :(得分:1)
不确定但看起来ResponseRange是一个值列表,在这种情况下你需要一个像这样的in子句。
SELECT CASE
WHEN crr.Name = 'Prescreens' THEN null
ELSE crr.Codes
END
FROM Client_Response_Ranges_for_SSRS_Respondent_Answer crr
where crr.Codes IN (@ResponseRange);
答案 2 :(得分:1)
这是因为您的查询正在尝试检查NULL = NULL
将此添加到您的查询中,如果您想要这样做:
SET ANSI_NULLS OFF
但是,您的查询存在一些限制因素:
拉吉