Расчет кросс-таблицы SQL в ASP.net - PullRequest
1 голос
/ 05 августа 2011

Я надеюсь, что кто-то может помочь с проблемой, которую я не могу охватить своими ограниченными знаниями.У меня есть два 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]] by [Items.Quantity]. Однако таблица ITEMTYPES содержит список описаний ITEM (и идентификатора первичного ключа), который используется для ввода новых элементов. Таблица STORELIST использует дескрипторы в ITEMTYPES в качестве имен столбцов (т. е. ItemTypesВ таблице есть записи с именами [Item1], [Item2], имена столбцов в матрице также [Item1], [Item2]).

Вопрос в том, насколько я ограничен (и я имею в виду ограниченный)<6 месяцев с SQL) нет никакого способа выполнить вычисление, основанное на именах столбцов - мне пришлось бы каким-то образом абстрагировать итоги в другую таблицу с дополнительными полями для Region (это объясняет операторы sum () в запросе 1)и выполнять вычисления таким образом - или у кого-то есть более изящная идея? </p>

Структуры таблиц согласно запросу Лоуренса:

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

Оцените ответ!

1 Ответ

0 голосов
/ 05 августа 2011

Хорошо, у вас есть 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']);
    }
}

, теперь я написал это в коде psuedo, и я не уверен, что вы можете хорошо перевести это на VB.С этими двумя циклами foreach или while или чем угодно, вы можете привязать результаты к таблице или поместить их в другой массив или список ... Надеюсь, это поможет вообще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...