Sqlite 一直在尝试组织一个专栏';s数据后拼接
我试图从一个SQLite表中提取数据,如下所示:Sqlite 一直在尝试组织一个专栏';s数据后拼接,sqlite,Sqlite,我试图从一个SQLite表中提取数据,如下所示: IP PORT PROTOCOL ------------------------------------------- 192.168.50.106 0 TCP 192.168.50.106 0 TCP 192.168.50.106 68 UDP 192.168.50.106 53 TCP 1
IP PORT PROTOCOL
-------------------------------------------
192.168.50.106 0 TCP
192.168.50.106 0 TCP
192.168.50.106 68 UDP
192.168.50.106 53 TCP
192.168.50.106 53 TCP
192.168.50.109 0 TCP
192.168.50.109 0 TCP
192.168.50.109 53 UDP
192.168.50.109 445 TCP
192.168.50.109 445 TCP
192.168.50.109 139 TCP
现在,使用命令:
SELECT IP, GROUP_CONCAT(Port, ',') From PortData WHERE Protocol = 'TCP' GROUP BY Ip ORDER BY IP ASC
我得到:
IP PORT
--------------------------------------
192.168.50.106 0,0,53,53
192.168.50.109 0,0,445,445,139
这真的很接近我需要的!我只需要“Port”列只显示不同的端口值,并按升序端口号排序。在连接第二列之后,如何组织第二列的数据,这让我非常困惑
下面是我试图让输出看起来像的内容,如果您想要一个示例:
IP PORT
--------------------------------------
192.168.50.106 0,53
192.168.50.109 0,139,445
非常感谢你的帮助 不要在后面组织格式化数据,而要在前面组织格式化数据,方法是通过初步查询消除重复项并生成正确的顺序。可以作为子查询或公共表表达式(CTE)(即WITH子句)执行此操作 (之后尝试排序和消除重复项基本上需要重新解析字符串,将其放入表中,排序和删除重复项,然后将其放回列表中。您只需要完成一个完整的循环。或者,如果不在数据库中,则必须使用宿主语言进行排序,但需要相同的总体步骤。)
WITH prepped AS (
SELECT IP, Port From PortData
WHERE Protocol = 'TCP'
GROUP BY IP, Port
ORDER BY IP, Port
)
SELECT IP, GROUP_CONCAT(Port, ',')
FROM prepped
GROUP BY Ip
ORDER BY IP ASC