2016-05-04 4 views
0

Проблема в том, что в базе данных отсутствуют некоторые значения, и мне нужно найти их в кросс-таблице с ближайшим.ACCESS - запрос кросс-таблицы - ближайший матч

таблица, которую я CrossTab кажется, что это:

Source data

Это недостающие значения для цен конкурентов - Для пункта 111 я не цену на 3-й неделе для первого участника и 2-й недели для 2-й участник. Для пункта 222 я пропустил 2-недельную цену для 1-го участника и 1,3-недельную для 2-го участника. Я хочу использовать цену за ближайшую неделю в своих выходных данных.

выход (для индекса цен расчета) должен выглядеть следующим образом (цены конкурентов в колонках, чтобы сделать расчеты далее в сводной таблице в Excel):

enter image description here

Вопрос заключается в том, как «поиск» в ближайшие недели цены конкурентов, я отметил отсутствие цен в апельсине.

Надеюсь, что проблема будет ясна, в случае возникновения каких-либо вопросов - спросите, я попробую разъяснить все! Большое спасибо заранее!

Обновление. я пытаюсь сделать это следующим образом (с подзапроса):

 SELECT m_week, item_code, my_price, (SELECT TOP 1 com_price 
    FROM MyTable AS T 
    WHERE T.item_code = MyTable.item_code 
    AND T.m_week <= MyTable.m_week 
    AND competotor_id = 1 
    ORDER BY T.m_week) AS Comp1_price, (SELECT TOP 1 com_price 
    FROM MyTable AS T 
    WHERE T.item_code = MyTable.item_code 
    AND T.m_week <= MyTable.m_week 
    AND competotor_id = 2 
    ORDER BY T.m_week) AS Comp2_price 
    ... the same for each competitor 
    FROM MyTable 

Он работает .. но очень медленно, и мне нужно скопировать/вставить для каждого конкурента. Следующая вещь - я хочу, чтобы искать цены не только вниз, но и вверх (вдоль недели)

ответ

0

Вы можете основывать свою перекрестную таблицу на запросе, который использует подзапросы: SELECT p.competitor_id, p.m_week, p.item_code, p.com_price, p.my_price,
nz(p.com_price, (Select top 1 week_price FROM ( SELECT m_week, item_code, Max(com_price) AS week_price FROM YourTable WHERE com_price Is Not Null GROUP BY m_week, item_code ) as WeekPrices WHERE [item_code]=p.item_code and m_week < p.m_week ORDER BY m_week desc)) as com_price_calc FROM YourTable AS p;

  • Это приводит в таблице с com_price_calc колонки с нулевыми данными заполненными
  • Я псевдонимами YourTable как п. - для родителей
  • функция
  • новозеландских() для доступа только, вы можете заменить его IFNULL() , если вы используете MySQL
  • Внутренний подзапрос показывает недельную цену для каждой комбинации m_week - item_code, где она не равна нулю.
  • Внешние фильтры подзапроса для родительского элемента item_code и предыдущей недели, и поскольку он использует «ORDER BY m_week desc», верхняя часть 1 вернет предыдущие недели значение.
+0

Поздравления и благодарю вас! Но когда я прочитал ваш ответ, я понял, что ошибся в описании проблемы. На самом деле у меня нет строк с отсутствующими ценами, и я думаю, что это усложняет исходный вопрос. –

+0

Может быть, я могу каким-то образом добавить функцию nz() в запрос кросс-таблицы. Теперь это похоже на «TRANSFORM Avg» (p.com_price) SELECT p.m_week, p.item_code, p.my_price FROM MyTable как p GROUP BY p.m_week, p.item_code, p.my_price PIVOT p.competitor_id' –

 Смежные вопросы

  • Нет связанных вопросов^_^