【问题标题】:TSQL SSRS Cross Reference another columnTSQL SSRS 交叉引用另一列
【发布时间】:2017-01-13 14:59:38
【问题描述】:
ID   | Col2 | Col3 | SequenceNum   
--------------------------------   
1    |  x   |  12  |  5
2    |  y   |  11  |  6    
3    |  a   |  45  |  7    
100  |  b   |  23  |  8   
101  |  a   |  16  |  9    
102  |  b   |  28  |  10    
4    |  a   |  9   |  11
5    |  b   |  26  |  12
6    |  x   |  100 |  13

我目前有一份 SSRS 报告,您可以输入 ID ,它会显示这些 ID 的数据。例如,假设您输入 start ID 2 end ID 5 它会报告 2,3,4,5 Col2Col3 数据。

但我真正想要的是让它返回 2,3,100,101,102,3,4,5

我相信可能有某种方法可以交叉引用 SequenceNum 列,但我对 SQL 和 SSRS 还很陌生,谁能帮忙?

所以用户会输入参数... start-ID = 2 其中SequenceNum6end-ID = 5,其SequenceNum12

【问题讨论】:

    标签: sql tsql reporting-services sql-server-2012 ssrs-2012


    【解决方案1】:

    当您使用 SSRS 时,您可以为参数指定 ValueLabel

    使用以下 SQL 作为源创建数据集:

    select distinct ID as Label
                   ,SequenceNum as Value
    from YourTable
    order by SequenceNum
    

    然后在参数的属性中,在Available Values 中选择Get values from query,然后选择上面的数据集。将Value fieldLabel field 设置为标签和值列,然后单击OK。您需要使用相同的数据集为您的开始和结束参数执行此操作。

    您的参数现在将是下拉菜单,向用户显示ID 值,但将SequenceNum 值传递给您的查询。然后,您可以使用它们来过滤您的主数据集。

    【讨论】:

      【解决方案2】:

      分别从起始 id 和结束 id 提供的值中提取起始和结束序列号,并在 WHERE 条件下使用它们,如下所示

      DECLARE @StartingSeqNum INT, @EndingSeqNum 
      SELECT @StartingSeqNum  = SeqNum FROM tableName  WHERE ID = @start_id
      SELECT @EndingSeqNum = SeqNum FROM tableName  WHERE ID = @end_id
      
      SELECT Col2,Col3
      FROM tableName
      WHERE SeqNum BETWEEN @StartingSeqNum AND @EndingSeqNum 
      

      【讨论】:

      • 这完全是错误的做法。请改用内置的 SSRS 参数功能。
      猜你喜欢
      • 1970-01-01
      • 2019-08-26
      • 1970-01-01
      • 2011-12-26
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多