SQL根据另一列的条件填充新列

时间:2018-01-10 20:58:10

标签: sql-server

我有一张桌子,医生可以在多个地方工作 - 其中一个不在其他地方。每个地点都处于一个州。我想创建一个列,显示该医生的主要位置的状态。因此,如果某个位置不是主要位置,那么我想查看主要位置的状态。

我正在尝试创建PrimaryLocationState列,但我似乎无法得到此内容。

    declare @t table (doctorid int,
                      primarylocation char,
                      state varchar(2)
                      )

    insert into @t 
    values (1, 'Y', 'FL'), (1, 'N', 'GA'),
           (2, 'Y', 'TX'), (2, 'N', 'CA');

我试图得到这个结果:

    DoctorId      PrimaryLocation     State     PrimaryLocationState
    -----------------------------------------------------------------
      1              Y                  FL              FL
      1              N                  GA              FL
      2              Y                  TX              TX
      2              N                  CA              TX

3 个答案:

答案 0 :(得分:3)

您可以使用相关子查询或OUTER APPLY来获取主要位置

read_html('http://www.imdb.com/title/tt1490017/') %>%
    html_nodes(xpath = '//div[@class="originalTitle"]/node()[not(self::span)]') %>%
    html_text()

答案 1 :(得分:2)

示例

Select *
      ,PrimaryLocationState =max(case when primarylocation='Y' then state end) over (partition by doctorid) 
 from @t

<强>返回

doctorid    primarylocation state   PrimaryLocationState
1           Y               FL      FL
1           N               GA      FL
2           Y               TX      TX
2           N               CA      TX

答案 2 :(得分:0)

您需要INNER JOIN

首先,您需要找到每位医生的主要位置。

SELECT DoctorID, state as PrimaryLocationState
FROM yourTable
WHERE primarylocation = 'Y';

然后将该信息添加到每一行

SELECT t.*, P.PrimaryLocationState
FROM YourTable t
INNER JOIN ( SELECT DoctorID, state as PrimaryLocationState
             FROM yourTable
             WHERE primarylocation = 'Y') P
   t.DoctorID = p.DoctorID