Oracle sqldeveloper 用空白SQL填充联接表

Oracle sqldeveloper 用空白SQL填充联接表,oracle-sqldeveloper,Oracle Sqldeveloper,我对SQL比较陌生,所以请温柔一点!我有一个表,它按月保存特定结构元素的状态列表。这只保存状态已更改(例如已同意)的记录,因此我丢失了一些尚未启动的信息(表中不存在这些信息,因为表中没有任何操作)。基本上,我想将它连接到另一个保存日期的表,这样,如果没有记录,它就会用空白填充状态 例如,表A保存状态 Cycle ID .... Status 69082 ............2 80412 ............3 表B列出了日期 Cycle ID..... Date 6

我对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中不存在的空白状态):


非常感谢您的帮助。

我认为表a上的正确连接将为您提供这些列

我认为表a上的正确连接将为您提供这些列

您可以使用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中,您可以在
Else
部分上使用
CAST(tb.status为varchar(3))


检查join子句。上述查询将获取所有具有
日期的周期。如果一个周期没有出现在表B中(没有日期),它将不会出现在结果中。另外,您可能需要使用
distinct
来表示不要重复具有多个日期的周期。

您可以使用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中,您可以在
Else
部分上使用
CAST(tb.status为varchar(3))


检查join子句。上述查询将获取所有具有
日期的周期。如果一个周期没有出现在表B中(没有日期),它将不会出现在结果中。另外,您可能需要使用
distinct
来禁止重复包含多个日期的周期。

我尝试过右连接、左连接(基本上都是!),只返回两个都有记录的记录。好的,您是否尝试使用内部联接并在选择中添加TableA.status?这正是我尝试使用的代码:选择a.BUDGET\u STATE\u HISTORY\u ID作为ID,b.vis\u ID,a.STRUCTURE\u ELEMENT\u ID,a.PREVIOUS\u STATE,a.NEW\u STATE,a.从预算更改的时间\u状态\u历史a右连接预算\u周期b在b.BUDGET\u周期\u id=a.BUDGET\u周期\u id其中b.model\u id='1'和a.structure\u元素\u id='1057'我尝试过右连接和左连接(基本上都是!),它只返回两个都有记录的记录。好的,您是否尝试使用内部联接并在选择中添加TableA.status?这正是我尝试使用的代码:选择a.BUDGET\u STATE\u HISTORY\u ID作为ID,b.vis\u ID,a.STRUCTURE\u ELEMENT\u ID,a.PREVIOUS\u STATE,a.NEW\u STATE,a.已更改预算的时间\u状态\u历史a在b.BUDGET\u CYCLE\u id=a.BUDGET\u CYCLE\u id上右连接预算\u周期b,其中b.model\u id='1'和a.structure\u element\u id='1057'