我正在制作SSRS报告以显示学生班级信息。 我有一个名为class的表,其中包含有关学生参加的课程的信息。
我的要求是显示课程发生的日期。例如:如果列名称周一=' Y'然后我必须把这一天显示为[Mon]。我试过下面的代码。
O(n^2 log n)
我得到了如下输出。
在输出中,每行末尾都有一个额外的逗号。有没有办法在select语句中排除它?有没有其他方法来获得输出?使用case语句似乎会减慢执行速度。
答案 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)
将删除最后一个,