【问题标题】:SQLite Select data from multiple rows returned as one rowSQLite 从多行中选择数据作为一行返回
【发布时间】:2011-08-27 15:46:38
【问题描述】:

我想知道是否可以在 SQLite 中使用 SELECT 语句将两行的数据合并为一,类似于下面 SQL Server 论坛中的建议。

考虑以下基于 SQL Server 的场景(取自 http://forums.aspfree.com/microsoft-sql-server-14/merge-the-two-rows-in-one-row-245550.html

假设有一张桌子

员工

ID |名称 |
1 | x |
1 | P |
2 |是 |
2 |问 |
3 | W |

我们希望将 select 语句的结果数据输出:

Emp_Data

标识 |名称-1 |名称-2 |
1 | x | P |
2 |是 |问 |
3 | w | |

帖子中的答案建议使用以下 SQL 作为可能的解决方案:

SELECT 
   a.ID, 
   [Name-1] = ISNULL(( 
   SELECT TOP 1 Name 
   FROM emp 
   WHERE ID = a.ID),''), 
   [Name-2] = ISNULL(( 
   SELECT TOP 1 b.Name 
   FROM emp b 
   WHERE b.ID = a.ID 
       AND Name NOT IN( 
           SELECT TOP 1 Name 
           FROM emp 
           WHERE ID = b.ID 
       )),'') 
FROM emp a 
GROUP BY a.ID   

使用 SQLite 是否可以使用嵌套的 SELECT 语句生成列 [Name-1] 和 [Name-2],就像我们可以在 SQL Server 中执行的上述操作一样?

【问题讨论】:

    标签: sqlite


    【解决方案1】:
    SELECT 
       a.ID, 
       COALESCE(a.Name,'') as "Name-1", 
       COALESCE((SELECT b.Name FROM Emp b 
                 WHERE b.ID = a.ID
                 AND b.rowid != a.rowid LIMIT 1),'') as "Name-2"
    FROM emp a 
    GROUP BY a.ID
    

    【讨论】:

    • 谢谢道格,今晚回家后我会试一试,然后更新问题:)
    • 这不容易扩展到 2 之外,是吗?呜呜。
    【解决方案2】:

    试试这个:::

    select id, group_concat(name) from emp group by id;

    ;)

    【讨论】:

    • 这个选择语句根本没有回答原来的问题? Doug 的代码提供了“Name-1”和“Name-2”两列所需的输出。我想你可能误解了原来的问题。
    • 在具有 2 级连接的 sql 上帮助了我很多。感谢您指向 group_concat - 功能。在 SQLite 中工作得很好。
    【解决方案3】:

    Doug 的解决方案对我不起作用。然而,下面的代码确实对我有用,但速度很慢......

    SELECT 
       a.ID, 
       a.Name AS Name1,
       (SELECT b.Name FROM Emp b 
                 WHERE b.ID = a.ID
                 AND b.Name != a.Name LIMIT 1) AS Name2
    FROM emp a 
    GROUP BY a.ID
    

    【讨论】:

      猜你喜欢
      • 2019-06-11
      • 1970-01-01
      • 2014-01-21
      • 1970-01-01
      • 2015-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-04
      相关资源
      最近更新 更多