2013-08-16 40 views
0

我目前正在從查詢中抽出用戶添加的手推車中的所有項目。下面的代碼演示了我試圖達到的目標,我把所有的手推車物品和數量合計起來,以及將每件物品的成本+數量與彼此相加並對其進行總結。我也希望能夠從這個查詢中調出bog標準列名稱。我不太清楚我可以做什麼,除了創建3個查詢,一個用於手推車本身,一個用於用戶的總數量,一個用於用戶的總成本,但是它肯定可以完成在一個查詢權?SQL多個別名旁邊查詢

<cfquery datasoure="#application.datasource#" name="trolley"> 
    Select *, IsNull(Sum(trolley_amount), 0) As trolly_items, IsNull(Sum(trolley_cost * trolley_amount), 0) As trolley_totalcost 
    From trolley 
</cfquery> 
+1

你能提供一些樣本數據和你想要的結果嗎?此外,什麼是「沼氣標準列名稱」? –

+0

你會期望在手推車表格中的鏈接,產品的鏈接,尺寸等。而且這不是數據,它是你如何去確定一個查詢中的多個別名。其餘的目前無關緊要。 – Banny

+0

除了用CFQUERY標籤調用它之外,這個問題與ColdFusion有什麼關係?聽起來像是一個SQL問題..? –

回答

1

我會給你一個coldfusion的答案。您可以在一個查詢中對數據庫和查詢查詢的1或2個查詢執行此操作。這將在你的代碼中看起來像2或3個查詢,但實際上它將是1個查詢(到數據庫)以及2個「數組過濾或者攻擊」操作。總之它是這樣的:

<cfquery name="myTrolley" datasource="myDSN"> 
SELECT Item, quantity, cost, quantity * cost AS totalItemCost 
FROM trolley 
WHERE userID = <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#userid#"/> 

<cfquery name="itemTotals" dbtype="query"> 
    SELECT SUM(totalItemCost) AS grandTotal 
    FROMY myTrolley 
</cfquery> 

當然,你的實際查詢會有所不同,但如果你的目標是減少交通的DB(一個值得稱讚的目標,可有時收穫紅利)那麼這可能是要走的路。對於這類問題,Q的Q值非常精簡和高效 - 當然,當你嘗試過度複雜時,它會發生故障。

+1

另一種方式來做到這一點,可能更快但不太直觀的是ArraySum(myTrolley [「TotalItemCost」]) –

+0

我喜歡這個答案,非常有效率和信息量。是的,我同意,我期望在這個項目上做的一件事是減少我進行數據庫調用的數量。我從來不知道你可以運行查詢查詢,所以這是非常有用的。 – Banny

-1

正如Adam所說,這是一個SQL問題。

從這個問題來看,我認爲你想獲得手推車中的物品,總成本和購買物品的總數(總金額)。

從我的經驗和小小的挖掘,你不能在一個SQL語句中做所有的事情。相反,你需要兩個陳述。首先要獲得小車中的物品,第二個項目將總成本和總金額結合起來,就像您在問題中的SQL一樣,因爲它們都是集合函數

所以刪除你的SQL中的那個*並創建一個新的SQL。

+0

@Leigh你介意承認事實,我的答案有助於增加投票嗎?謝謝。 – yomexzo

+0

要求表決是非常不莊重的。我相應地降低了評分。 –

+0

@DanBracuk好像認真嗎?你可能會這樣認爲,但我不想要票,所以我可以做出更好的貢獻。誰下了一個正確的答案。 smh – yomexzo