SQL按顺序排序

时间:2018-03-01 19:24:22

标签: sql ms-access

我有一张桌子,我正在尝试排序并遇到一些困难。 它是一个序列列,用于表示分层数据,自动排序如下所示:

SEQUENCE 
1
1.1
1.10
1.2
1.3    
...
2
2.1

而我需要排序:

SEQUENCE 
1
1.1
1.2
...
1.10
2
2.1

它在MS Access中,它是一个本地(临时)表,所以我无法访问hierarchyID或任何其他很酷的MS-SQL工具。此外,序列没有固定的级别,所以我不能轻易地将它们分成列。有任何想法吗?

澄清:序列没有设定级别,并且不限于两个部分。它通常是5+(例如1.1.1.1.1)。

4 个答案:

答案 0 :(得分:0)

您可以在主要版本和次要版本之间拆分值,将它们转换为数字,然后按两者排序。

但是,在Access SQL中拆分很难。如果您要使用3部分或更多部分版本号,我建议您使用VBA。

SELECT Sequence
FROM MyTable
ORDER BY 
CInt(IIF(Sequence LIKE "*.*", Left(SEQUENCE, Instr(1, SEQUENCE, ".")-1)),
IIF(IsNumeric(Right(Sequence, Len(SEQUENCE) - Instr(1, SEQUENCE, "."))), CINT(Right(Sequence, Len(SEQUENCE) - Instr(1, SEQUENCE, "."))) ,0))

答案 1 :(得分:0)

对于两部分的层次结构值,您可以使用以下内容:

SELECT Sequence 
FROM MyTable
ORDER BY Int(Sequence), Int(Replace(Sequence,".","0"));

答案 2 :(得分:0)

您可以使用 Val 通过订购这个花哨的表达式:

INSERT INTO 
    `org_emps`
    (
        3,
        `admin_id`, 
        `emp_branch_id`, 
        `emp_name`, 
        'ITSe08A 0002', 
        `emp_designation`, 
        `emp_department`, 
        `emp_father_husband`, 
        `emp_mother`, 
        `emp_wife`, 
        `emp_nominee`, 
        '02-03-2018', 
        `emp_dob`, 
        `emp_gender`, 
        `emp_m_status`, 
        `emp_father_husband_dob`, 
        `emp_mother_dob`, 
        `emp_wife_dob`, 
        `emp_nominee_dob`, 
        `emp_aadhar`, 
        `emp_PAN`, 
        `emp_bank_ac_num`, 
        `emp_bank_ifsc`, 
        `emp_bnk_branch_address`, 
        `emp_pf_status`, 
        `emp_esi_status`, 
        `emp_income_tax`, 
        `emp_tds`, 
        `emp_photo`, 
        `emp_addr1`, 
        `emp_addr2`, 
        `emp_phone`, 
        `emp_email`, 
        `emp_w_off`, 
        `emp_ot_rate`, 
        'March 2, 2018, 8:46 am', 
        1, 
        `emp_key`
    ) 
    SELECT (
        `id`, 
        `admin_id`, 
        `emp_branch_id`, 
        `emp_name`, 
        `emp_org_id`, 
        `emp_designation`, 
        `emp_department`, 
        `emp_father_husband`, 
        `emp_mother`, 
        `emp_wife`, 
        `emp_nominee`, 
        `emp_doj`, 
        `emp_dob`, 
        `emp_gender`, 
        `emp_m_status`, 
        `emp_father_husband_dob`, 
        `emp_mother_dob`, 
        `emp_wife_dob`, 
        `emp_nominee_dob`, 
        `emp_aadhar`, 
        `emp_PAN`, 
        `emp_bank_ac_num`, 
        `emp_bank_ifsc`, 
        `emp_bnk_branch_address`, 
        `emp_pf_status`, 
        `emp_esi_status`, 
        `emp_income_tax`, 
        `emp_tds`, 
        `emp_photo`, 
        `emp_addr1`, 
        `emp_addr2`, 
        `emp_phone`, 
        `emp_email`, 
        `emp_w_off`, 
        `emp_ot_rate`, 
        `emp_created_on`,
        `emp_type`, 
        `emp_key`
    ) 
    FROM 
        `org_emps` 
    WHERE 
        id = 2

它也适用于9以上的段落:

Int(Val([Sequence])), Val(Mid([Sequence], 1 + Len(Str(Int(Val([Sequence]))))))

答案 3 :(得分:0)

因为我只限于MS Access SQL功能,并且序列不限于两部分结构,所以我最终采用了June7的建议,当我制作时只添加零表,只需使用简单的ORDER BY即可正确排序。

感谢大家的帮助。