2012-03-28 34 views
1

因此,我知道足夠的SQL只是非常危險(我通常不會在後端工作),但無法創建以下視圖成功;)我後面的結果集是一個數據集,其行具有從多個表(而不是所有列的1xN平面)分配的列別名。根據與相應相關表的行ID關聯的外鍵,在查看主表時,存在多對一關係。如何創建一個返回結果的2x2(或NxN)矩陣的視圖

理想情況下,我想,看起來像這樣在返回的數據集:

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 

I t似乎很容易,因爲結果列選擇器是可重複的,其中包括表達式(引用sqlite的語法圖)。在提到錯誤時,我假設它正在抱怨第二個'AS',我試圖讓table。*被指定爲別名。任何幫助正確的方向表示讚賞。如果我不得不,我想我可以明確指出所有列,但感覺像是一個雜湊。

回答

1

AS修飾符只能應用於單個列,而不應用於您使用的*集合。你將不得不把它們分成具體的名稱,(這是最好的實踐恕我直言,無論如何)

它看起來像你想做一個「數據透視表」。在數據庫中製作它們可能非常棘手。我可以說,如果你有一個數據結果,每行來自不同的表格源,並且每個表格的列都是IDENTICAL,那麼你可以嘗試使用UNION語句將不同的結果結合在一起,就像它們只是一個數據集一樣。

請注意,所有列都採用UNION中第一個數據集的命名提示,並且數據類型都必須相同。

+0

感謝您的回覆。對於這個觀點,有幾個FK是屬於特定行的「元數據」,我最初的天真思考是我可以把它掃描成一個單一的選擇。我習慣於使用中間層的足夠大的項目,我想我已經從這個團隊中完成了所有的工作;)我還沒有進入我的項目的這一部分,但我正在思考這將最終成爲像我所做的其他事情一樣的排序查詢。 – 2012-08-14 14:46:11