2017-09-10 158 views
0

比方说,我在我的表中的下列行:合并不同行之一,并指望有多少行合并

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

请帮助你eaiser。 https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-query – Yunnosch

回答

1

这将是可能的,但也许不是关系数据库可用功能的完成/最佳利用。

这似乎是利用关系的忠告的情况。

如何考虑一个外部Id的表和一个描述符表,然后是一个链接表(关联表或许多其他名称用于连接关系的表)。

例如

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 10-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 

这似乎并可能过于复杂,但与外部ID的和描述符之间的一对多,多对一之一,也是多对多关系对应。

即将是等同于

9     val-1, val-3, val-5, val-6, val-7 

(除了VAL-6被他人使用)

将没有需要合并或取消合并,将csv分成单独的描述符。你只是得到你想要的。例如

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

要获得每组一个输出行查询时,使用GROUP BY,并使用aggregation functions合并值:

SELECT ExternalID, 
     COUNT(*), 
     group_concat(Descriptor) 
FROM myTable 
GROUP BY ExternalID; 

如果原始Count值事项,SUM(Count)更换COUNT(*)