2011-08-05 45 views
1

我希望有人可以幫助解決一個問題,我無法將有限的知識包裹起來。我有兩個SQL查詢:ASP.net中的SQL交叉表計算

SELECT 
    SUM(Matrix.[ITEM1]) AS [ITEM1], 
    SUM(Matrix.[ITEM2]) AS [ITEM2] 
FROM StoreList 
INNER JOIN Matrix ON StoreList.[Store Number] = Matrix.[Store Number] 
WHERE (StoreList.Region = '@Value') 

SELECT 
    ITEMTYPES.type_description, 
    ITEMS.Quantity 
FROM ITEMS 
INNER JOIN ITEMTYPES ON ITEMS.type_id = ITEMTYPES.id 

現在,這些做的是恢復我想乘在一起值的列表(例如,獲得由[ITEM1],乘以[ITEM1]最後的量[Items.Quantity]。然而,ITEMTYPES表包含用於輸入新項目的ITEM(和主鍵id)的描述列表。STORELIST表使用ITEMTYPES中的描述符作爲列名稱(即。ItemTypes表具有記錄稱爲[Item1],[Item2]; Matrix中的列名稱也是[Item1],[Item2])

問題是這樣的 - 從我有限的經驗(我的意思是限制 - < 6個月SQL )沒有辦法執行校準基於列名稱的計算 - 我必須以某種方式將總計抽象到另一個表中,併爲Region添加額外的字段(這解釋了查詢1中的sum()語句),並按照這種方式執行計算 - 或者其中一些具有更多優雅的想法?

表的結構按照勞倫斯的要求:

For Table [MATRIX]: 
[Store Number] (PK, int, not null) 
[ITEM1] (int, default 0) 
[ITEM2] (int, default 0) 

For Table [ITEMTYPES]: 
[id] (PK, int, not null), 
[ITEMTYPE] (nvarchar(50), not null) 

現在,示例數據(請原諒任何格式的問題!):

[MATRIX] 
Store Number ITEM1 ITEM2 
------------------------------ 
123456   1  15 
678920   31  9 

[ITEMTYPE] 
id ITEMTYPE 
------------------------------ 
1  ITEM1 
2  ITEM2 

欣賞響應!

+0

你可以給兩個表的數據庫結構和示例數據嗎? –

+0

只允許在使用SQL時執行此操作?我的意思是你可以使用輔助服務器語言,如C#或PHP或其他? –

+0

對不起勞倫斯 - 我忘了發佈你的第二個查詢的迴應 - SQL查詢正在asp.net(VB.net)內消耗並饋送到gridview。 – Dweeb

回答

0

好了,所以你有2個結果,這些2個查詢到2名不同的有序對列表或數組返回......所以你必須在第一個結果中的

//FROM THE MATRIX QUERY 
array(
    [0] => array(
     "Store Number" => 123456, 
     "ITEM1" => 1, 
     "ITEM2" => 15 
    ), 
    [1] => array(
     "Store Number" => 678920, 
     "ITEM1" => 31, 
     "ITEM2" => 9 
    ), 
    ETC... 
) 

//FROM YOUR ITEM QUERY 
array(
    [0] => array(
     "type_description" => "ITEM1", 
     "quantity" => ??? 
    ), 
    [1] => array(
     "type_description" => "ITEM2", 
     "quantity" => ??? 
    ) 
    ETC...... 
) 

確定的格式,現在你可以做2的foreach循環,你迭代通過2個陣列

foreach(arrayMatrix as store){ 
    foreach(arrayItems as item){ 
     print "Store: "+ store['Store Number']+" ITEM: " + item['type_description']+" total: "+ (store[item['type_description']] * item['quantity']); 
    } 
} 

現在我寫了這個僞代碼,我不知道如果你可以把這個很好地轉換成VB。有了這兩個foreach或while循環或任何你可以將結果數據綁定到網格或將它們放在另一個數組或列表中......我希望這有所幫助。

+0

任何意見,如果你可以或不能理解我試圖建議什麼? –

+0

感謝您輸入勞倫斯,我正在查看剛纔的僞代碼,如果我能看到合適的話,我會回來的:) – Dweeb