vb.net报告tablix aplhanumeric排序

时间:2016-11-01 15:47:14

标签: vb.net reporting-services

我有以下代码,它适用于sql management studio,但不适用于vb.net:

Dim opdragsorteeraplhanumeries As New SqlCommand
    konneksie.ConnectionString = "Data Source=GIDEON-E-LAPTOP\SQLEXPRESS2014;Initial Catalog=SkeduleringDatabasis;Integrated Security=True"
    konneksie.Open()
    opdragsorteeraplhanumeries.Connection = konneksie
    opdragsorteeraplhanumeries.CommandText = "SELECT * FROM Oesskattings " & _
    "ORDER BY " & _
        "CASE WHEN ISNUMERIC(blokno) = 1 THEN right(Replicate('0',21) + blokno, 21) " & _
           "WHEN ISNUMERIC(blokno) = 0 then Left(blokno + Replicate('',21), 21) " & _
          " ELSE blokno " & _
        " End"

    opdragsorteeraplhanumeries.ExecuteNonQuery()
    konneksie.Close()
    MsgBox("Alphanumeries gesorteer")

2 个答案:

答案 0 :(得分:0)

{{1}}

答案 1 :(得分:0)

您需要提供一些其他信息。所有条目都包含一个唯一的数字,后跟非数字数据,您想要按数字排序吗?或者是其他可能的组合。比如,有没有" 3-5"和" 3-43"?在那种情况下3-5会在3-43之前到来吗?或者可能有" 3-Y-5"和" 3-X-17"?如果是这样哪个应该先来?怎么样" 3-X-5"和" 3-5-X"?等

另外,当您提供示例值列表时,是否应该表示来自一个记录或多个记录的数据?也就是说,你有一个包含" 5-BOP,2,11,4_ANW"的字段的记录吗?或者你是说一个记录有" 5-BOP",另一个记录有" 2"等?

在任何情况下,SQL和我所知道的任何内置函数都不会执行您描述的那种排序 - 有效地将字段分成几部分并仅对其中一个部分进行排序或具有如何关联的规则不同的部分。

如果这是一种特定于一个报告的排序,您可以对内存中的记录进行排序。如果它是整个系统中常用的一种,您可能希望能够在数据库上执行此操作。执行此操作的常用方法是创建一个字段,将数据伪造成传统SQL排序的工作方式。就像现实是在数字之后有一个数字然后是一些额外的东西,然后创建一个只保存数字并被声明为整数的字段。如果你需要对数字进行排序,并按照下面的字母顺序排序,那么就有一个数字字段和其余部分的字段。如果它比这更复杂,您可能需要创建一个填充到最大大小的字段然后连接的字段。就像你总是有一个最多3个数字,最多4个字符的数字,你可以把这些值变成" 005BOP"," 002",&# 34; 011"和" 004ANW"。

我曾经构建了一个系统,在那里我创建了一个SQL用户定义的函数,它读取了凌乱的数字并将其格式化,就像我上面描述的那样,然后我在这个字段上创建了一个索引。这节省了两次记录中的相同数据。

一般情况下,如果你有一个由多个这样的部分组成的字段,通常最好在数据库中有单独的字段并在需要时将它们放在一起,而不是一个字段。试着拆开。将各种东西放在一起比分开它们几乎总是更容易。