SQLite Выбор данных из нескольких строк, возвращаемых как одна строка - PullRequest
4 голосов
/ 18 мая 2011

Я хотел бы знать, возможно ли использовать оператор SELECT в SQLite для объединения данных из двух строк в одну, аналогично тому, как это предлагается на форуме по SQL Server ниже.

Рассмотрим приведенный ниже сценарий, основанный на SQL Server (взят из http://forums.aspfree.com/microsoft-sql-server-14/merge-the-two-rows-in-one-row-245550.html)

. Имеется таблица

Emp

ID | Имя |
1 | x |
1 | P |
2 | y |
2 | Q |
3 | W |

Мы хотим получить результирующие данные из оператора selectдля вывода:

Emp_Data

Id | Имя-1 | Имя-2 |
1 | x | P |
2 | y | Q |
3 | w| 1024 *

Ответ в посте предлагает следующий 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, можно генерировать столбцы [Name-1] & [Name-2] используя вложенные операторы SELECT, как мы можем сделать выше в SQL Server?

Ответы [ 3 ]

6 голосов
/ 18 мая 2011
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
1 голос
/ 26 октября 2011

Решение Дуга не сработало для меня.Код ниже, однако, работал для меня, но он очень медленный ...

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
1 голос
/ 21 июля 2011

попробуйте это :::

выберите id, group_concat (имя) из группы emp по id;

;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...