【问题标题】:SQLite Group_ConcatSQLite Group_Concat
【发布时间】:2017-10-07 21:41:58
【问题描述】:

我需要一个 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

我需要一个查询,它为我提供每天具有相同分数的每个人的串联,查询结果以以下格式显示:

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) near "SEPARATOR": syntax error",所以我猜关键字 'SEPARATOR' 对 SQLite 无效。

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

谢谢

【问题讨论】:

  • 您是否考虑过使用 BETWEEN 和 WHERE 来发布您的查询字符串
  • 很糟糕,您确实发布了查询字符串,请查看此链接 SEPARATOR not found sqlite.org/lang_keywords.html

标签: android sqlite android-sqlite


【解决方案1】:

使用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;

【讨论】:

    【解决方案2】:

    试试这个

    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

    【讨论】:

      猜你喜欢
      • 2010-12-26
      • 2013-09-17
      • 2015-06-28
      • 2013-02-04
      • 2022-11-22
      • 2010-12-26
      • 2021-08-08
      • 2016-02-14
      • 2018-09-23
      相关资源
      最近更新 更多