Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从SQL Server表创建组合值字符串_Sql_Reporting Services - Fatal编程技术网

从SQL Server表创建组合值字符串

从SQL Server表创建组合值字符串,sql,reporting-services,Sql,Reporting Services,我构建了一个SQL查询,返回以下结果: ID Number ID IndexColumn String_To_Use Checking_ID 0000 1 0000 1 -2 1000 2 1000 2 -2 1020 3 1020 3 -2 1130 4 1130 4

我构建了一个SQL查询,返回以下结果:

ID   Number ID  IndexColumn String_To_Use   Checking_ID
0000    1   0000    1                         -2
1000    2   1000    2                         -2
1020    3   1020    3                         -2
1130    4   1130    4                         -2
1198    5   NULL    9999     NULL             NULL
1199    6   1199    5                         -2
1210    7   1210    6                         -2
1240    8   NULL    9999     NULL             NULL
1250    9   NULL    9999     NULL             NULL
1260    10  1260    7                         7
1261    11  NULL    9999     NULL             NULL
1280    12  NULL    9999     NULL             NULL
1296    13  NULL    9999     NULL             NULL
1298    14  NULL    9999     NULL             NULL
1299    15  1299    8                         8
1501    16  NULL    9999     NULL             NULL
我需要用ID值填充列字符串_to_Use,如果检查_ID列的值为-2多次重复,则表示用户在某个范围内选择了ID,这些重复值将显示为0000-1130;如果没有重复值-2,例如1260。 基于此逻辑,上表将在字符串_To_Use列中包含以下值:

ID   Number ID  IndexColumn String_To_Use   Checking_ID
0000    1   0000    1       0000-1130         -2
1000    2   1000    2       0000-1130         -2                 
1020    3   1020    3       0000-1130         -2
1130    4   1130    4       0000-1130         -2
1198    5   NULL    9999    NULL              NULL
1199    6   1199    5       0000-1210         -2
1210    7   1210    6       0000-1210         -2                  
1240    8   NULL    9999    NULL              NULL
1250    9   NULL    9999    NULL              NULL
1260    10  1260    7       1260              7
1261    11  NULL    9999    NULL              NULL
1280    12  NULL    9999    NULL              NULL
1296    13  NULL    9999    NULL              NULL
1298    14  NULL    9999    NULL              NULL
1299    15  1299    8       1299              8
1501    16  NULL    9999    NULL              NULL

谢谢

您需要定义相邻组。在这种情况下,您可以简单地对检查_id不是-2的次数进行累加

之后,剩下的是窗口函数和字符串操作:

select t.*,
       (case when checking_id <> -2
             then min(id) over (partition by grp) + '-' + max(id) over (partition by grp)
             else id
        end) as string_to_use
from (select t.*,
             sum(case when checking_id <> -2 then 1 else 0 end) over (order by id) as grp
      from t
     ) t;

此版本假定id是字符串。如果它是一个数字,则可以通过将代码与cast或convert混在一起来轻松调整代码。

如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮{},以很好地格式化和语法突出显示它!你的数据库管理系统是什么?请@user10581977,我建议通过将外部图像替换为表格来编辑这个问题,可能需要以下帮助:因此这个问题在将来很有用,即使图像已关闭,也有助于提高可读性。此外,如果@gordon linoff回答这个问题,就像你的“谢谢”便条中所说的那样,请将答案标记为解决您问题的答案。谢谢。grp分区上的maxid给出了错误,这是一个非布尔类型的表达式,在预期条件的上下文中指定。到目前为止,使其部分工作的唯一方法是,如下所示:此答案是一个非常聪明和有用的答案,但并不完全正确,这里有一些注释:1在order by id上作为grp==>它给出了错误;2检查\u id-2==>它给出了不正确的结果,为了让逻辑工作,它需要检查\u id=-2。我已经用输出编辑了下面的答案。但是,即使进行这些更改,查询也需要一些额外的输入才能正常工作。能请人帮忙修理一下吗。谢谢字符串_To_使用列输出,但在范围内时仍不能提供正确的输出;正确的应该是:1前4行==>0000-1130;2第六行和第七行==>1199-1210
select t.*,
     (case when Checking_id = -2
             then min(id) over (partition by grp) + '-' + max(id) over (partition by grp)
             else id
      end) as string_to_use
from (select t.*
            ,sum(case when Checking_id = -2 then 1 else 0 end) over (partition by id) as grp
      from t
     ) t order by id;

ID  Number  ID  IndexColumn String_To_Use   Checking_id    grp   string_to_use
0000    1   0000    1                             -2        1    0000 -1210 
1000    2   1000    2                             -2        1    0000 -1210 
1020    3   1020    3                             -2        1    0000 -1210 
1130    4   1130    4                             -2        1    0000 -1210 
1198    5   NULL    9999    NULL                NULL        0    NULL
1199    6   1199    5                             -2        1    0000 -1210 
1210    7   1210    6                             -2        1    0000 -1210 
1240    8   NULL    9999    NULL                NULL        0    NULL
1250    9   NULL    9999    NULL                NULL        0    NULL
1260    10  1260    7                             7         0    1260 
1261    11  NULL    9999    NULL                NULL        0    NULL
1280    12  NULL    9999    NULL                NULL        0    NULL
1296    13  NULL    9999    NULL                NULL        0    NULL
1298    14  NULL    9999    NULL                NULL        0    NULL
1299    15  1299    8                             8         0    1299 
1501    16  NULL    9999    NULL                NULL        0    NULL