2011-08-05 43 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