从一行中的两行获取值

时间:2019-04-02 10:37:46

标签: sql

我有两个表,一个表保存代码类型,另一个表保存日历模板。 每个模板都有一个开始日期和一个结束日期(星期一-星期日)

代码类型表

ID -            Code Type - Name 
1  ---------    1111 -------Monday
2  ---------    1112 -------Tuesday
3  ---------    1113 -------Wednesday
4  ---------    1114 -------Thursday
5  ---------    1115 -------Friday
6  ---------    1116 -------Saturday
7  ---------    1117 -------Sunday

模板表

ID -  Name -       Startday -  Endday
1  ---  Work ----- 1111 -------1115 
1  -  Weekend -    1116 -------1117 

现在,我想通过sql语句显示如下表:

ID -  Name -     Startday -     Endday 
1  -- Work ----- Monday ------- Friday 
1  -  Weekend -  Saturday ----- Sunday 

我试图通过使用联接来做到这一点,但是我只能联接代码类型,并且我要实现的表中的每一行都有2种代码类型,因此它不起作用。 我也尝试通过CASE语句来做到这一点,但我无法在开始日期和结束日期提出两种情况)

有人知道如何实现这一目标吗?

1 个答案:

答案 0 :(得分:2)

您的“代码类型”表格式不正确。该答案假设codetype实际上是唯一的,因此可以用于join

应该设置您的表,以便将startdayendday链接到id列,而不是链接到codetype列-大概id是表的主键。

假设codetype是唯一的,则只需要两个联接:

select t.id, t.name, cts.name as startdate, cte.name as endday
from template t join
     codetype cts
     on t.startday = cts.codetype join
     codetype cte
     on t.endday = cte.codetype;