我有一张桌子,我正在尝试排序并遇到一些困难。 它是一个序列列,用于表示分层数据,自动排序如下所示:
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)。
答案 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即可正确排序。
感谢大家的帮助。