SQLite Group_Concat

时间:2017-10-07 21:41:59

标签: android sqlite android-sqlite

我需要一个Android应用程序的SQLite查询,而且我还没有得到它。 通过一些研究,我得到了一个可能的解决方案,但我还没有设法让它工作,所以它可能在SQLite中不起作用。 我有一个包含以下架构的表:

DAY  | PERSON | SCORE
---------------------
  1  | PERS1  | A
  1  | PERS2  | A
  1  | PERS3  | A
  1  | PERS4  | B
  1  | PERS5  | B
  1  | PERS6  | B
  2  | PERS1  | C
  2  | PERS2  | C
  2  | PERS3  | C
  2  | PERS4  | C
  2  | PERS5  | C
  2  | PERS6  | C

我需要一个查询,它为每个PERSON提供每天相同分数的连接,查询结果按以下格式显示:

DAY | RES_A             | RES_B             | RES_C
---------------------------------------------------------------------------------
1   | PERS1+PERS2+PERS3 | PERS4+PERS5+PERS6 | NULL
2   | NULL              | NULL              | PERS1+PERS2+PERS3+PERS4+PERS5+PERS6

只有3种类型的可能结果,因此查询将始终返回相同数量的列。 我一直在努力寻找“RES_A”的解决方案。列(例如)是这样的:

GROUP_CONCAT(IF(SCORE = 'A', CONCAT('+', PERSON), '') SEPARATOR '') AS 'RES_A'

但是Java说" E / SQLiteLog:(1)接近" SEPARATOR":语法错误",所以我想关键字' SEPARATOR'对SQLite无效。

你能帮我解决一下这个问题吗?

由于

2 个答案:

答案 0 :(得分:2)

使用CASE expressionsgroup_concat()的第二个参数:

SELECT Day,
       group_concat(CASE Score WHEN 'A' THEN Person END, '+') AS Res_A,
       group_concat(CASE Score WHEN 'B' THEN Person END, '+') AS Res_B,
       group_concat(CASE Score WHEN 'C' THEN Person END, '+') AS Res_C
FROM MyTable
GROUP BY Day;

答案 1 :(得分:0)

试试这个

SELECT 
    DAY,
    group_concat(concat) AS RES_A
FROM (
    SELECT
        DAY,
        CASE 
            WHEN SCORE IS 'A' THEN PERSON
        END AS concat
    FROM (YOUR_TABLE_NAME)
)
GROUP BY DAY