我想将多行返回为一行,由Android游标适配器处理。
我目前有一个带有日期列的表,我想将所有具有相同日期的行作为一行返回。
请考虑下表:
ID | Name | Date
-------------------------------
1 | 'Mark' | '08/06/15'
2 | 'Peter' | '08/06/15'
3 | 'Henry' | '08/06/15'
4 | 'Bob' | '17/04/16'
5 | 'Tony' | '23/08/13'
6 | 'Tim' | '17/04/16'
我想查询结果如下:
Date | Names
------------------------------------
'08/06/15' | 'Mark, Peter, Henry'
'17/04/16' | 'Bob, Tim'
'23/08/13' | 'Tony'
使用this link,我可以获取以下查询:
SELECT t1.id, GROUP_CONCAT(t1.Name ) AS Names
FROM Table1 t1 JOIN Table2 t2 ON t1.ID = t2.ID
GROUP BY t1.ID;
但是,由于所有数据都来自同一张表,并且我事先知道要查询的日期,因此我希望对输入的数组使用JOIN
并让SQLite对其进行解析(即,像innest in Postgres),就好像它来自实际表一样。
该数组将类似于:
['08/06/15', '17/04/16', '23/08/13', '09/08/18']
这也可以通过嵌套SQL查询来完成,但是我希望有一个优化的解决方案。
答案 0 :(得分:0)
SQLite没有数组类型。
最简单的方法是使用IN operator:
SELECT ID, group_concat(Name) AS Names
FROM MyTable
JOIN (VALUES('08/06/15'), ('17/04/16'), ('23/08/13'), ('09/08/18'))
ON Date = column1
GROUP BY ID;
如果您确实要使用联接,则可以使用VALUES clause(在Android Jelly Bean或更高版本中)或复合查询来构造虚拟表:
SELECT ID, group_concat(Name) AS Names
FROM MyTable
JOIN (SELECT '08/06/15' AS Date UNION ALL
SELECT '17/04/16' UNION ALL
SELECT '23/08/13' UNION ALL
SELECT '09/08/18' ) USING (Date)
GROUP BY ID;
Scaffold
答案 1 :(得分:0)
这是您想要的吗?
SELECT Date, group_concat(Name) AS Names
FROM table_name
GROUP BY Date;