1

我对 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 表的外观(它只是用于查询的自定义表):

在此处输入图像描述 在此处输入图像描述

响应范围 在此处输入图像描述

更多信息:所以我有 6 个参数,它们是

BeginDate

EndDAte

SurveyID

SupplierID

ResponseRange

ClientResponseRange

问题是 ClientResponseRange 取决于 ResponseRange - 所以实际上 ClientResponseRange 是隐藏的。对于除一个以外的 ResponseRange 的所有选择,我将自动使用任何 ResponseRange 的值作为 ClientResponseRange。我做错了什么,但我不知道是什么..非常感谢任何提示。

4

3 回答 3

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...

然后在您的查询中加入它。这将允许您管理哪些代码对应于哪些类别,而无需更改报告中的查询。

于 2012-12-31T03:57:28.607 回答
1

那是因为您的查询正在尝试检查NULL = NULL

将此添加到您的查询中,如果这是您想要做的:

SET ANSI_NULLS OFF

但是,您的查询存在一些歧义:

  1. 为什么“Prescreens”的代码值在表格中显示为 NULL,在属性页中显示为“3”?
  2. 如果您尝试使用查询输出填充@ResponseRange,那么声明的参数在哪里?
  3. 此外,填充此变量的方法不正确。
  4. 如果变量是预先填充的,您能否告诉我们它是如何填充的?

拉吉

于 2012-12-31T04:38:16.003 回答
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);
于 2012-12-31T03:50:12.857 回答