我正在尝试使用hexa数字对一些字符串进行排序,我的问题是它们对于我在Access中的知识不规则而且很难,所以我真的可以使用一些帮助!
每个文件"Files"
都有一个REQUEST
字符串,其中包含相应的RESPONSE
字符串,它们在前4个字符"16xx"
上相似,且始终为8-9个字符{ {1}}有时会在更多地方和字符5-6中"xx"
添加到RESPONSE +40
。我从我的表中取了一些例子(真正的表是600行,包含24个不同文件的不同字符串)
ex 19 -> 59
,ID = pimekey
,Files = file where string came form
,Nr = what nr the string had in file
,String = the string I would like to sort
...以便TYPE = if it was a REQUEST or RESPONSE
之前使用Files
REQUEST
以RESPONSE
的形式对它们进行异议。
我已经尝试过整天做出不同的查询来解决这个问题,但无法正确理解语法。尝试使用SQL left
,iif
,mid
,len
函数进行排序,更新查询,但我得到语法错误,没有或错误的值...是否有这样做的方式还是不规则甚至排序?
谢谢
EDIT 从一个文件现在看起来如何:
ID Files Nr String Type
1 1 1 1636 19 02 2F REQUEST
2 2 2 1637 19 02 2F REQUEST
3 2 3 1631 19 02 2F REQUEST
4 3 4 1637 19 04 0A 1B 47 FF REQUEST
28 1 10 1636 59 02 FF RESPONSE
29 2 11 1637 59 02 FF RESPONSE
30 2 12 1631 59 02 7F C1 00 00 28 C2 A4 RESPONSE
31 3 13 1637 59 04 0A 1B 47 00 RESPONSE
我希望如何:
ID Files Nr String Type
1 1 1 1636 19 02 2F REQUEST
28 1 10 1636 59 02 FF RESPONSE
2 2 2 1637 19 02 2F REQUEST
29 2 11 1637 59 02 FF RESPONSE
3 2 3 1631 19 02 2F REQUEST
30 2 12 1631 59 02 7F C1 00 00 28 C2 A4 RESPONSE
4 3 4 1637 19 04 0A 1B 47 FF REQUEST
31 3 13 1637 59 04 0A 1B 47 00 RESPONSE
答案 0 :(得分:1)
您可以尝试这样的事情(MYSQL)。它使用用户定义的变量来生成"订购领域。我想FIL是表的名称:
SELECT ID, FILES, NR, STRING, TYPE
FROM (
SELECT *
, @o:= CASE WHEN TYPE='REQUEST' THEN @o+2 ELSE 0 END ord
, @p:= CASE WHEN TYPE= 'RESPONSE' THEN @p+2 ELSE 0 END ord2
, @o+@p AS ord_tot
FROM FIL A
CROSS JOIN (SELECT @o:=-1,@p:=2 ) T1
ORDER BY TYPE, FILES, NR
) B
ORDER BY ord_tot;
输出:
ID FILES NR STRING TYPE
1 1 1 1636 19 02 2F REQUEST
28 1 10 1636 59 02 FF RESPONSE
2 2 2 1637 19 02 2F REQUEST
29 2 11 1637 59 02 FF RESPONSE
3 2 3 1631 19 02 2F REQUEST
30 2 12 1631 59 02 7F C1 00 00 28 C2 A4 RESPONSE
4 3 4 1637 19 04 0A 1B 47 FF REQUEST
31 3 13 1637 59 04 0A 1B 47 00 RESPONSE
答案 1 :(得分:0)
实现此目的的最简单方法是使用this one,然后在正确的字段上使用ORDER BY
。这当然是假设您可以修改数据的存储方式以符合所描述的十六进制格式。