Sqlite 一直在尝试组织一个专栏';s数据后拼接

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

我试图从一个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
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