我需要一个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无效。
你能帮我解决一下这个问题吗?
由于
答案 0 :(得分:2)
使用CASE expressions和group_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