我们说我的表格中有以下行:
ExternalID Count Descriptor
1 1 val-1
1 1 val-2
2 1 val-3
2 1 val-4
2 1 val-5
2 1 val-6
3 1 val-7
我需要完成这样的事情:
ExternalID Count Descriptor
1 2 val-1, val-2
2 3 val-3, val-4, val-5
3 1 val-7
这样的事情会成为可能吗?
答案 0 :(得分:1)
这可能是关键数据库可用功能的完成或最佳利用。
这似乎是利用关系的基础。
如何考虑外部ID的表和描述符的表,然后是链接表(关联表或许多其他名称用于表示关系的表)。
e.g。
CREATE TABLE externals (_id PRIMARY INTEGER KEY, extid INTEGER)
CREATE TABLE descriptors (_id PRIMARY INTEGER KEY, descriptor TEXT)
CREATE TABLE link_externals_to_descriptors (external_ref INTEGER NOT NULL, descriptor_ref INTEGER NOT NULL)
所以对于上面你有(注意我已经使用id&#39-12和100-106只是为了说明目的而轻易区分): -
外部表
_id extid
10 1
11 2
12 3
99 9
描述符表
_id descriptor
100 val-1
101 val-2
102 val-3
103 val-4
104 val-5
105 val-6
106 val-7
链接表(link_externals_to_descriptors)
external_ref descriptor_ref
1 100
1 101
2 102
2 103
2 104
3 106
99 100
99 102
99 104
99 105
99 107
这似乎也可能过于复杂,但应对externalID和描述符之间的一对多,多对多关系。
即。 99 相当于
9 val-1, val-3, val-5, val-6, val-7
(除了其他人使用的val-6除外)
不需要合并或取消合并,将csv拆分为单独的描述符。你得到你想要的东西。 e.g。
SELECT * FROM link_externals_to_descriptors WHERE external_ref = 99;
用于驱动查询将返回一个游标,其数量(行数)将是外部id的描述符数。
因此,以下内容可用于获取计数和描述符(将信息输出到日志): -
Cursor csr = db.query("link_externals_to_descriptors",
null,
"external_ref=?",
new String[]{"99"},
null,null,null);
int my_count_of_descriptors = csr.getCount()
Log.d("MYINFO","The number of Descriptors for EXTID 99 is" +
Integer.toString(my_count_of_descriptors) +
" They are:-");
while(csr.moveToNext) {
Log.d("MYINFO","\t" + csr.getString(csr.getColumnIndex("descriptor_ref")));
}
csr.close();
答案 1 :(得分:1)
要在查询时为每个组获取一个输出行,请使用GROUP BY,并使用aggregation functions合并值:
SELECT ExternalID,
COUNT(*),
group_concat(Descriptor)
FROM myTable
GROUP BY ExternalID;
如果原始Count
值很重要,请将COUNT(*)
替换为SUM(Count)
。