Как создать представление, которое возвращает матрицу результатов 2x2 (или NxN) - PullRequest
1 голос
/ 28 марта 2012

Так что я знаю достаточно SQL просто для того, чтобы быть действительно опасным (я обычно не работаю с бэкэндом), но не могу успешно создать следующее представление;) Набор результатов, который мне нужен, - это набор данных, который имеетстроки, назначенные в качестве псевдонима столбца из нескольких таблиц (вместо 1xN плоских всех столбцов).При просмотре главной таблицы существует отношение многие-к-одному, основанное на внешних ключах, связанных с идентификатором строки соответствующей связанной таблицы.

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

dataset.transaction_row[n]: col1, col2, col3, coln... (columns from the transaction table)
dataset.category_row[n]: col1, co2, col3, coln... (columns from the category table)

и так далее ...

Я получаю следующую ошибку:

Query Error: near "AS": syntax error Unable to execute statement

От:

CREATE VIEW view_unreconciled_transactions 
AS SELECT account_transaction.* AS transaction_row, 
          category.* AS category_row,
          memorized.name_rule_replace OR account_transaction.name AS payee   
FROM account_transaction
LEFT JOIN memorized ON account_transaction.memorized_key = memorized.id
LEFT JOIN category ON account_transaction.category_key = category.id
WHERE status != 2
ORDER BY account_transaction.dt_posted DESC

Это кажется достаточно простым, поскольку селектор столбца результата является повторяемым, который включает выражения (ссылающиеся на синтаксические диаграммы sqlite).Что касается ошибки, я предполагаю, что она жалуется на второй «AS», где я пытаюсь получить таблицу. *, Назначенную в качестве псевдонима.Любая помощь в правильном направлении приветствуется.Если бы мне пришлось, я бы мог явно указать все столбцы, но это похоже на помойку.

1 Ответ

1 голос
/ 13 августа 2012

Модификатор AS можно применять только к одному столбцу, а не к коллекции, такой как *, которую вы использовали. Вам придется разбить их на конкретные имена (что в любом случае является наилучшей практикой)

Похоже, вы хотите создать "сводную таблицу". Их может быть сложно сделать в базе данных. Я могу сказать, что если у вас есть результат данных, где каждая строка происходит из другого источника таблицы, а столбцы из каждой таблицы являются ИДЕНТИЧНЫМИ, то вы можете попробовать использовать оператор UNION, чтобы объединить разные результаты, как будто они всего лишь набор данных.

ОБРАТИТЕ ВНИМАНИЕ, что все столбцы берут свои метки именования из первого набора данных в UNION, и все типы данных должны быть одинаковыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...