Как выбрать конкретный столбец c из базы данных помещения, учитывая заданный параметр c в запросе помещения? - PullRequest
2 голосов
/ 18 января 2020

Как мне сделать следующее?

Я хочу выбрать конкретный столбец c в запросе на номер. Этот столбец будет указан как параметр в функции запроса.

Представьте, что моя база данных выглядит следующим образом:

+----+---------+---------+---------+---------+
| ID | Column1 | Column2 | Column3 | Column4 |
+----+---------+---------+---------+---------+
| 1  | 13      | 45      | 77      | 12      |
+----+---------+---------+---------+---------+
| 2  | 5       | 34      | 67      | 7       |
+----+---------+---------+---------+---------+
| 3  | 8       | 33      | 69      | 12      |
+----+---------+---------+---------+---------+

Я бы хотел указать любой из столбцов и вернуть значение в указанном столбце для всех строк.

@Query("SELECT " + desiredSubcategory + " AS subcategoryValue FROM subcategory_table")
List<Subcategory> getSubcategory(String desiredSubcategory);
class Subcategory {
      Float subcategoryValue;

      public void setSubcategoryValue(Float subcategoryValue) {
            this.subcategoryValue = subcategoryValue;
      }

}

Редактировать 1: Согласно этому сообщению: Комната: передать столбцы Имя в качестве параметра в методе DAO эта функция невозможно сделать. Тем не менее, это был год go.

Ответы [ 2 ]

1 голос
/ 19 января 2020

Вы можете сделать с Common Table Expression с CASE как

@Query("WITH parms(c) AS (SELECT :columnName) " +
        "SELECT  COALESCE(" +
        "CASE " +
        "WHEN (SELECT c FROM parms) = 'column1' THEN column1 " +
        "WHEN (SELECT c FROM parms) = 'column2' THEN column2 " +
        "WHEN (SELECT c FROM parms) = 'column3' THEN column3 " +
        "WHEN (SELECT c FROM parms) = 'column4' THEN column4 " +
        "END" +
        ",0) AS subcategoryValue " +
        "FROM subcategory_table" +
        ";")
float[] getSubcategory(String columnName);

Класс Subcategory не нужен и менее эффективен, но может использоваться, если требуется изменить float[] getSubcategory(String columnName); на List<Subcategory> getSubcategory(String columnName);

0 голосов
/ 18 января 2020

Обычный SQL будет просто использовать

SELECT COLUMN1, COLUMN2, COLUMN3, COLUMN4 from <TABLE>

, так что, вероятно, что-то вроде

@Query("SELECT " + desiredSubcategory1 + " AS subcategoryValue1 + "," +
desiredSubcategory2 + " AS subcategoryValue2 + "," +
desiredSubcategory3 + " AS subcategoryValue3 + "," +
desiredSubcategory4 + " AS subcategoryValue4 + "," +
"FROM subcategory_table")
List<Subcategory> getSubcategory(String desiredSubcategory);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...