我在不同的表上有这两列:
表1中的一列,显示年份和星期。有重复项,因为表格右侧的这一列中每行都有不同的数据集,但我把它留下来以使问题更清楚:
|.Year Week.|
|..2015 52..|
|..2015 52..|
|..2015 53..|
|..2016 01..|
|....etc....|
|....etc....|
|..2017 23..|
|..2017 23..|
|..2017 23..|
|..2017 24..|
|..2017 25..|
|..2017 25..|
然后是表2中的这一列,它按时间顺序显示了一周的长度,因为你以1周为增量逐年减少。这更像是一个日历表/数据库:
|----Week-----|
|080115_140115|
|150115_210115|
|220115_280115|
|.....etc.....|
|.....etc.....|
|090217_150217|
|160217_220217|
|230217_010317|
我的问题是如何最有效地将表2中的每周列与表1中的年周列连接,而不对任何连接语句进行硬编码
where [year week] = 'yyyy ww'
等等?
我最初在想一个联合声明,但意识到我在两个表中都没有共同的列。
我必须保持两个表的格式相同。正在思考,有没有从|年周提取周数列成一个单独的列,然后以这种方式加入它?
我不知道从哪里开始。
答案 0 :(得分:0)
尝试使用字符串函数从表1中提取年份,星期,并在表格中加入2年和一周。从表2中提取年份和周数,如下所示。
年是
select DATEPART( year,CONVERT(DATE,SUBSTRING(SUBSTRING('080115_140115',0,7),5,2) + SUBSTRING(SUBSTRING('080115_140115',0,7),3,2) +SUBSTRING(SUBSTRING('080115_140115',0,7),0,3),102))
周是
select DATEPART( wk,CONVERT(DATE,SUBSTRING(SUBSTRING('080115_140115',0,7),5,2) + SUBSTRING(SUBSTRING('080115_140115',0,7),3,2) +SUBSTRING(SUBSTRING('080115_140115',0,7),0,3),102))
答案 1 :(得分:0)
好的,所以这可能不是最有效的答案,但我为表1做了一个select distinct语句,然后通过excel加入表2。
由于这是一个静态/历史表(我只需要做一次)我再次将excel中的模板/数据导入sql,并使用year year作为连接两个表的公共列。