我的SQL查询用于填充下拉列表是否有意义?

时间:2012-12-31 03:43:54

标签: sql sql-server reporting-services cascadingdropdown

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

enter image description here enter image description here

ResponseRange enter image description here

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

BeginDate

EndDAte

SurveyID

SupplierID

ResponseRange

ClientResponseRange

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

3 个答案:

答案 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

但是,您的查询存在一些限制因素:

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