2017-09-10 289 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(*)