【问题标题】:how to combine multiple values of fields in sqlite database如何在sqlite数据库中组合多个字段值
【发布时间】:2021-06-17 16:59:11
【问题描述】:

我有一个包含 3 列(ID、键、值)的表。
像这样:

如您所见,key 列有重复或相同的文本,但value 没有。我想根据key 列将value 列的文本组合/附加到一个字段中,用逗号或换行符分隔它们。并删除key列的重复文本。
像这样:

是否有任何 SQL 查询代码来完成此操作?
提前致谢。

【问题讨论】:

    标签: sql database sqlite database-normalization


    【解决方案1】:

    如果结果中值的顺序不重要,那么您可以使用聚合和GROUP_CONCAT() 来实现,在 SQLite 中不支持ORDER BY 子句并且值的顺序无法保证:

    SELECT MIN(ID) ID, key, GROUP_CONCAT(value) value 
    FROM tablename 
    GROUP BY key
    

    如果你需要ID排序的值,那么使用GROUP_CONCAT()窗口函数:

    SELECT DISTINCT
           MIN(ID) OVER (PARTITION BY key) ID, 
           key, 
           GROUP_CONCAT(value) OVER (
             PARTITION BY key 
             ORDER BY ID
             ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
           ) value
    FROM tablename 
    

    【讨论】:

    • 谢谢,但我想从表中完全删除重复的键,如您在图像中看到的那样。我认为我们应该使用update 或其他东西。还有一种方法可以用换行符或任何其他字符更改逗号 (,)。第一个代码语法有效,但第二个无效并返回错误:靠近“(”:语法错误)
    • @MurtazaMukhtar 对于您在第二个查询中遇到的错误,我相信您使用的是旧版本的 SQLite。 SQLite 在 3.25.0 版本中引入了窗口函数,当前版本为 3.35.5 (2021-04-19)。对于您的要求,我的建议是不要这样做。你有一个规范化的表。这是应该的方式。不要对其进行非规范化。你可以阅读这篇文章:stackoverflow.com/questions/3653462/… 并决定。
    • 尊敬的先生/女士,如果您帮助我解决上述问题,我非常感谢您的帮助,不要担心规范化,因为它是个人数据库,我想要这样。 select 查询工作正常,但我想update 表并用自定义字符或新行更改“,”。请兄弟帮我解决这个问题,我陷入了困境。
    猜你喜欢
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 2022-08-04
    • 2011-04-02
    • 1970-01-01
    • 2012-02-18
    相关资源
    最近更新 更多