我正在使用Report Builder 3.0。我有一个报告,其中一种排序基于使用行组的line
(它也在line
上分组)。当我在查询代码中使用LIKE
时,报表上的排序工作正常:它按A-Z排序。当我在查询代码中使用=
时,报告会对其进行排序:
LN BM4
LN BM2
LN BM1
LN BM6
LN BM5
LN WT2
LN WT4
LN WT3
LN WT5
LN BM3
LN WT5
为什么使用不同的运算符会导致排序差异?如何让我的报告对A-Z进行排序并仍使用=
运算符?另一方面,我的一个人告诉我。大家要使用=
,因为使用LIKE
会大大减慢查询速度,但看看它是如何导致此问题的,我想知道我应该使用什么。这是真的吗?
下面我已经在表格中提供了所有可能的数据。
**Raw data (unsorted)**
LN BM1
LN BM2
LN BM3
LN BM4
LN BM5
LN BM6
LN WT1
LN WT2
LN WT3
LN WT4
LN WT5
LN WT6
查询代码
(CASE
WHEN jobs.Uf_Production_Line LIKE 'LN BM%' THEN jobs.Uf_Production_Line
WHEN jobs.Uf_Production_Line LIKE 'LN WT%' THEN jobs.Uf_Production_Line
ELSE
(CASE
WHEN IsNumeric(RIGHT(jobs.Uf_Production_Line, 4)) = 1
THEN RIGHT(jobs.Uf_Production_Line, 4)
ELSE
(CASE
WHEN IsNumeric(RIGHT(jobs.Uf_Production_Line, 3)) = 1
THEN RIGHT(jobs.Uf_Production_Line, 3)
ELSE
'99999'
END)
END)
END
) AS line
查询底部的ORDER BY语句似乎没有任何效果,因为在报表生成器的“设计视图”中有基于行组的不同分组和排序规则
ORDER BY job, datevalue, shift
答案 0 :(得分:0)
当您使用类似" LN bm%",这里"%"意味着事后可以有任何事情发生。这意味着对任何类型的单词都是开放的,所以在这种情况下=是真正的使用方式。因为你已经提到它应该以" LN bm"以及之后的任何关键词:)
答案 1 :(得分:0)
如果您没有为查询指定任何排序,则记录将按数据库找到它们的顺序排列。
更改运算符可能会导致执行计划不同。这意味着数据将使用不同的方法来查找正确的数据,并且将按顺序返回行,具体取决于这些方法处理数据的方式。
例如,索引扫描会按照该索引的顺序生成行,但是表扫描会按照它们恰好存储在表中的顺序生成行。
即使是相同的查询,执行计划也可以更改。数据库收集有关用于选择执行计划的数据的统计信息,因此可以选择不同的计划,因为它对数据有了更好的了解。
如果没有指定查询的排序,您可以简单地确定订单是什么,甚至不会保持相同。