Arhn - архитектура программирования

Разбить запись на несколько записей для диапазонов календарных лет

У меня есть таблица, к которой мне нужно присоединиться, используя столбец ZIP, к другой таблице, чтобы создать представление.

--table 1
CREATE TABLE [dbo].[ZIP](
[ZIP] [varchar](5) NOT NULL,
[BEG] [datetime] NOT NULL,
[END] [datetime] NOT NULL,
CONSTRAINT [PK_ZIP] PRIMARY KEY CLUSTERED 
(
[ZIP] ASC,
[BEG] ASC
)) ON [PRIMARY]

insert into ZIP select '64112', '01/01/2012', '12/31/2045'
insert into ZIP select '64113', '01/01/2012', '12/31/2045'
insert into ZIP select '64114', '01/01/2012', '12/31/2045'

--table 2
CREATE TABLE [dbo].[ZIPCODE](
[ZIP] [varchar](5) NOT NULL,
[STATUS] [varchar](12) NULL,
CONSTRAINT [PK_ZIPCODE] PRIMARY KEY CLUSTERED 
(
[ZIP] ASC
)) ON [PRIMARY]



insert into ZIP select '64112', 'BMMNNNNNNNNN'
insert into ZIP select '64113', 'BMNNNNNNNNNB'
insert into ZIP select '64114', 'BMPNNNNNNNNP'

Записи в таблице 1 проходят через несколько лет, поэтому я хочу разбить ее на диапазоны календарных лет, как показано ниже, и если сегодняшняя дата попадает в определенный диапазон дат, тогда дата END должна быть «31/12/2045».

'64112', '01/01/2012', '12/31/2012'
'64112', '01/01/2013', '12/31/2013'
'64112', '01/01/2014', '12/31/2014'
'64112', '01/01/2015', '12/31/2045'

Таблица 2. Столбец СТАТУС «NNNNNNNNNNNN»

Столбец СТАТУС таблицы 2 настроен таким образом, что каждая позиция ссылается на CY. Первая позиция — 2004, вторая — 2005, третья — 2006 и т. д. ......, двенадцатая — 2015 в приведенной выше строке, и каждая позиция может иметь одно из 4 значений N, B, P или M.

Представление, которое я хочу создать, должно извлекать записи, как показано ниже.

'64112', '01/01/2012', '12/31/2012', N
'64112', '01/01/2013', '12/31/2013', N
'64112', '01/01/2014', '12/31/2014', N
'64112', '01/01/2015', '12/31/2045', N

Спасибо за помощь

20.01.2015

Ответы:


1

Вау, это должно быть одна из самых уродливых вещей, которые я когда-либо видел в базе данных.

Итак, единственное, что я могу придумать, это объединить строку для каждого почтового индекса/года вместе с подстрокой статуса, например:

select
zip,
cast('2012-01-01' as date) as TheYear,
substring(status,10,1) as Status
from
zipcode
UNION
select
zip,
cast('2013-01-01' as date) as TheYear,
substring(status,11,1) as Status
from
zipcode

Затем вы можете присоединиться к своей таблице ZIP. Вот пример в SQLFiddle. Я уверен, что я не правильно расставил позиции по годам, и уж точно не по всем годам, но я думаю, это должно вас заинтересовать.

20.01.2015
  • Спасибо @Andrew, я буду использовать этот союз, чтобы разбить диапазоны 20.01.2015
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..