0 голосов
спросил от в категории Oracle
Я запомняю идею в решении CHill60 1. Почему цикл, когда вы можете позволить базе данных выполнить эту работу для вас. Однако, я 'd хотел бы добавить несколько точек:

В PL/SQL вам не нужно использовать точку с запятой из переменной. Этот синтаксис обычно используется при использовании переменной хоста. Когда вы ссылаетесь на переменные, объявленные внутри PL/SQL, вы можете использовать as-is. Рассмотрим следующее
DECLARE     vCriteria NUMBER;    vResult   NUMBER; BEGIN    vCriteria := 5;    SELECT COUNT(*)    INTO vResult    FROM SomeTable    WHERE SomeColumn <= vCriteria;    DBMS_OUTPUT.PUT_LINE('Result ' || vResult); END;


Другое дело, что WEEK_NAME и сопровождающий Таблица. Названия недель выглядят как даты, хранящиеся в строке в формате YYYYMMDD. Если это правильно, я бы предложил использовать oracle date вместо строки.

Если таблица фактов будет содержать даты, вы можете легко извлечь неделю число, monhth, четверть и т. д. из значения даты. Например, TO_CHAR (datecolumn, 'IW') возвращает номер недели ISO для данной даты. Тип данных данных даты дает вам большую гибкость, и, насколько я могу судить, это устраняет необходимость в отдельных таблицах, которые определяют начало недели и т. Д.

Пожалуйста, войдите или зарегистрируйтесь чтобы ответить на этот вопрос.

0 голосов
ответил от
Я боюсь, что у меня нет доступа к Oracle, поэтому это решение использует базовый синтаксис T-SQL.

Все, что у вас есть для этого нужно соединить две таблицы на основе информации о имени недели, а затем сгруппировать по учетной записи и имени_ недели ... это работает
select A.ACCTID, B.WEEK_NAME, SUM(SALES) from Fact A inner join DATE_DIM B ON A.WEEK_NAME >= B.WEEK_BEGIN AND A.WEEK_NAME <= B.WEEK_END group by A.ACCTID, B.WEEK_NAME
Это редкое явление, которое вам нужно будет использовать в RDBMS - я написал статью, дающую альтернативы
select A.ACCTID, B.WEEK_NAME, SUM(SALES) from Fact A inner join DATE_DIM B ON A.WEEK_NAME >= B.WEEK_BEGIN AND A.WEEK_NAME <= B.WEEK_END group by A.ACCTID, B.WEEK_NAME
# [#^ #] - хотя он нацелен на SQL Server, принципы также применяются к Oracle (и MySQL и любой другой СУБД, использующей T-SQL).

Как и в других случаях, существуют функции, которые дают номера недель (например, см. #Ask Tom - week of the year # [#^ #], чтобы вы могли просто сохранить дату в таблице Fact (как Date type) и вычислить номер недели, чтобы избежать необходимости иметь таблицу DATE_DIM

Категории

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

Связанных вопросов не найдено

...