从“患者”表到“访问”表的一行中插入不同的值作为不同的条目

时间:2019-04-15 15:09:47

标签: sql sql-server

我处在困境中,我必须从“患者”表的一行中获取一些值,然后将其插入到不同的表(“访问”)中,但每个值都作为不同的行。使用SQL有什么办法做到这一点?

患者表:

| Jan       | Feb        |   March    | Apr  |  May      | June     |UniqueID|
| NULL      | 2018-02-01 | 2019-03-01 | NULL |2018-05-01 |  NULL    | 1      |
| 2019-01-01| 2019-02-01 | NULL       | NULL | NULL      |2018-06-01| 2      |

预期访问量表:

|   UniqueID        |   DateOfVist   |
|   1               |   2018-02-01   |
|   1               |   2019-03-01   | 
|   1               |   2018-05-01   |
|   2               |   2018-06-01   |  
|   2               |   2019-01-01   |
|   2               |   2019-02-01   |

2 个答案:

答案 0 :(得分:0)

我认为cross apply几乎可以满足您的需求:

select t.uniqueid, v.dateofvisit
from t cross apply
     (values (jan), (feb), (mar), (apr), (may), (jun)
     ) v(dateofvisit)
where v.dateofvisit is not null;

您可以添加insert into visits (uniqueid, dateofvisit)into visits来(分别)加载或创建visits表。

答案 1 :(得分:0)

您可以使用APPLY

insert into visits (UniqueID, DateOfVist   )
    select UniqueID, dateofvisist
    from patients t cross apply
         ( values (Jan), (Feb), . .  ) t(dateofvisist)
    where dateofvisist is not null;