我有一个表,我需要使用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记录遍历多年,所以我想将其分解为日历年度范围,如下所示,如果今天的日期在特定日期范围内,则结束日期应为'12 / 31/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 STATUS列'NNNNNNNNNNNN'
表2 STATUS列的设置方式是每个位置都引用一个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
感谢您的帮助
答案 0 :(得分:0)
所以我唯一能想到的就是为每个邮编/年组合一行,并将状态分成两部分,如下所示:
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
表格。这是example in SQLFiddle。我相信我多年来都没有获得正确的职位,而且我确实这些年来都没有做过,但我认为这应该让你顺利。