我对SQL比较陌生,所以请保持温和!我有一个表,按月保存特定结构元素的状态列表。这只保存状态已更改的记录(例如同意),因此我缺少什么时候没有启动的信息(由于表中没有任何操作,因此表中不存在) 。基本上我想将此连接到另一个保存日期的表,这样如果没有记录,则用空白填充状态。
例如,表A包含状态
Cycle ID .... Status
69082 ............2
80412 ............3
表B包含日期
Cycle ID..... Date
69082 ..........October 2013
75520 ..........November 2013
80045 ..........December 2013
80412 ..........January 2014
所以我想要的输出就是这样的(所以表B中的所有内容都有记录,而表A中的某些内容并不存在空白状态):
Cycle ID .... Date .... Status
69082 ........Oct 13.....2
75520 ........Nov13.....' '
80045 ........Dec13 ....' '
80412 ........Jan14 .....3
非常感谢任何帮助,谢谢。
答案 0 :(得分:0)
我认为表A中的正确联接会为您提供这些列
答案 1 :(得分:0)
您可以使用Case-Then-Else语句
Select
tb.cycleid ,
tb.date ,
Case
When tb.status is Null Then ''
Else tb.status /* cast to string! */
End as status
From tableB tb left outer join tableA ta on ta.cycleid=tb.cycleid
根据您的数据库,您必须转换为字符串状态值。例如,在sql server中,您可以在CAST(tb.status as varchar(3))
部分使用Else
。
查看join-clause。上述查询将获得具有date
的所有周期。如果表B中的周期没有数字(没有日期),它将不会出现在结果中。也许你需要使用distinct
来重复不要有多个日期的循环。