根据条件Concat表记录

时间:2015-08-10 06:33:31

标签: sql-server tsql reporting-services ssms

我正在制作SSRS报告以显示学生班级信息。 我有一个名为class的表,其中包含有关学生参加的课程的信息。 enter image description here

我的要求是显示课程发生的日期。例如:如果列名称周一=' Y'然后我必须把这一天显示为[Mon]。我试过下面的代码。

O(n^2 log n)

我得到了如下输出。

enter image description here

在输出中,每行末尾都有一个额外的逗号。有没有办法在select语句中排除它?有没有其他方法来获得输出?使用case语句似乎会减慢执行速度。

2 个答案:

答案 0 :(得分:1)

请尝试以下查询

[ClassName publicMethodName];

技巧:我添加了带文字的逗号,因此没有一半的案例评估。使用SELECT SUBSTRING(case when Monday ='Y' then',[Mon]' else '' end + case when Tuesday ='Y' then',[Tue]' else '' end + case when Wednesday='Y' then',[Wed]' else '' end + case when Thursday ='Y' then',[Thu]' else '' end + case when Friday ='Y' then',[Fri]' else '' end + case when Saturday ='Y' then',[Sat]' else '' end + case when Sunday ='Y' then',[Sun]' else '' end, 2,200) as classday FROM vw_Class_Without_Instructor 值时,我确保始终使用,[Mon]删除逗号。 明智的做法是在SUBSTRING的最后一部分参数中选择一个非常高的值,以便从第二部分的charindex开始返回所有内容。

请参阅msdn参考:https://msdn.microsoft.com/en-us/library/ms187748.aspx

  

如果start和length的总和大于   表达式中的字符,从表达式开始的整个值表达式   开始返回。

答案 1 :(得分:1)

你可以试试这个;

select 
    CASE WHEN LEN(classday_with_comma) > 0 THEN LEFT(classday_with_comma,LEN(classday_with_comma) - 1) ELSE '' END as classday
From (
    SELECT 
        case when Monday    = 'Y' then '[Mon],' else '' end +
        case when Tuesday   = 'Y' then '[Tue],' else '' end +
        case when Wednesday = 'Y' then '[Wed],' else '' end +
        case when Thursday  = 'Y' then '[Thu],' else '' end +
        case when Friday    = 'Y' then '[Fri],' else '' end +
        case when Saturday  = 'Y' then '[Sat],' else '' end +
        case when Sunday    = 'Y' then '[Sun],' else '' end as classday_with_comma
    FROM vw_Class_Without_Instructor
)  as x

两个案例陈述可以从

截断为一个
case when Monday   ='Y' then'[Mon]' else '' end + 
case when Monday ='Y' then ',' else '' end + 

case when Monday    = 'Y' then '[Mon],' else '' end +

LEFT(classday_with_comma, LEN(classday_with_comma) - 1)

将删除最后一个,