如何创建返回2x2(或NxN)结果矩阵的视图

时间:2012-03-28 03:51:31

标签: sqlite

所以我知道足够的SQL只是为了非常危险(我通常不会在后端工作)但是无法成功创建以下视图;)我之后的结果集是一个数据集从多个表(而不是所有列的1xN平面)分配为列别名的行。根据与相应相关表的行id关联的外键,查看主表时存在多对一关系。

理想情况下,我想要一个在返回中看起来像这样的数据集:

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',我正试图获得表格。*被指定为别名。任何正确方向的帮助表示赞赏。如果必须的话,我想我可以明确说明所有列,但这感觉就像一个kludge。

1 个答案:

答案 0 :(得分:1)

AS修饰符只能应用于单个列,而不能应用于您使用的*等集合。你必须将它们分解成具体的名称,(无论如何,这是最好的做法)

看起来你想制作一个“数据透视表”。在数据库中制作它们可能很棘手。我可以说,如果你是一个数据结果,每行来自不同的表源,并且每个表的列都是IDENTICAL,那么你可以尝试使用UNION语句将不同的结果连接在一起,就像它们一样只有一个数据集。

请注意,所有列都从UNION中的第一个数据集中获取其命名提示,并且数据类型都需要相同。