2015-12-01 2 views
2

У меня есть такой SQL-запрос, как:
SELECT SUM(CASE WHEN <table_name>.status = '2' THEN 1 ELSE 0 END) FROM <table name>.Как использовать «case-when» в Ecto Queries в эликсире?

Я хочу написать соответствующий Ecto Query для вышеуказанного. Что-то вроде:

from t in <table_name>, select: sum(...) 

Что такое аналогия с «случай-когда» в приведенном выше случае?

+2

Вы, вероятно, может сделать это с помощью фрагментов -> HTTPS : //hexdocs.pm/ecto/Ecto.Query.API.html#fragment/1 – JustMichael

ответ

4

Как комментарий сказал, вы можете использовать fragment/1:

query = from t in <Model>, select: fragment("SUM(CASE WHEN status = ? THEN 1 ELSE 0 END)", 2) 

Если вы хотите, чтобы указать таблицу, это работает для меня:

query = from t in <Model>, select: fragment("SUM(CASE WHEN ? = ? THEN 1 ELSE 0 END)", t.status, 2) 
+0

Это работает, но только небольшой вопрос ... как я могу связать имя таблицы со статусом типа «table_name» .status в фрагменте? – aceBox

+0

Обновлен мой ответ – AbM