Обновить столбец в том же запросе, что и в? - PullRequest
0 голосов
/ 12 марта 2019

В SQL Server я пытаюсь создать временную таблицу, а затем объединить ее на основе указанных критериев уникального ключа индекса, упорядочив их по системным номерам. Это выглядит примерно так:

SELECT DISTINCT
    t1.[SysNr] AS [oldSysNr], t1.[SysNr] AS [newSysNr], 
    t1.[Year], t1.[WorkTm], t1.[AMSTC], 
    t1.[AJCC], t1.[ShifNum], t1.[FMN]
INTO
    #TEMPTABLE
FROM 
    AppData.SCHED AS t1
JOIN
    AppData.SCHED AS tS ON t1.ShifNum = tS.ShifNum
                        AND t1.WorkTM = tS.WorkTM
                        AND t1.FMN = tS.FMN
WHERE
    t1.Year = 2019;

Это, по сути, даст мне старые записи, необходимые для столбца oldSysNr, поскольку год - это параметр, на который я смотрю. Тем не менее мне нужно обновить столбец newSysNr в том же запросе, нет отдельного запроса для обновления. Есть ли способ, которым это может быть достигнуто? Я знаю, что обновление выполняется только как отдельный запрос.

Вот данные, полученные из запроса:

oldSysNr NewSysNr  Year  WorkTm  AMSTC  AJJC  SHIFNUM  FMN  
-----------------------------------------------------------
24        24       2019     3    WVB    GH      9     YUBMS
25        25       2019     3    BMS    MJ      8     YUBMS
26        26       2019     3    BMS    PP      8     MJUNL 
27        27       2019     4    ZMG    MJ      5     MJUNL
28        28       2019     5    BR     OP      3     COLHP

Вот желаемые результаты:

oldSysNr NewSysNr  Year  WorkTm  AMSTC  AJJC  SHIFNUM  FMN  
-----------------------------------------------------------

 24        57        2019     3    WVB    GH      9     YUBMS
 25        58        2019     3    BMS    MJ      8     YUBMS
 26        59        2019     3    BMS    PP      8     MJUNL 
 27        60        2019     4    ZMG    MJ      5     MJUNL
 28        61        2019     5    BR     OP      3     COLHP

Как уже упоминалось, параметром, на который он смотрит, является год, и, учитывая, что вся идея заключается в том, что он обновит NewSysNr при условии, что ему будет дано такое же выражение соединения, но это будет еще один год, например 2020. Помощь в любом Данный способ по этому вопросу высоко ценится.

1 Ответ

0 голосов
/ 12 марта 2019

Вы должны иметь возможность вкладывать подзапрос в предложении FROM. Другими словами, вместо выбора столбцов x,y,z из самой таблицы вы можете заменить имя таблицы запросом, в котором используется обновленное предложение WHERE.

Так что в этом случае это будет выглядеть примерно так: (Примечание: вам может потребоваться настроить псевдоним в подзапросе ... Я просто ленив. Кроме того, вам не нужно выбирать все столбцы в подзапрос. Запрос в скобках - это подзапрос)

    SELECT DISTINCT
        tS.[SysNr] AS [newSysNr], t1.[oldSysNr]
        t1.[Year], t1.[WorkTm], t1.[AMSTC], 
        t1.[AJCC], t1.[ShifNum], t1.[FMN]
    INTO
        #TEMPTABLE
    FROM 

(SELECT DISTINCT
    t1.[SysNr] AS [oldSysNr]
    t1.[Year], t1.[WorkTm], t1.[AMSTC], 
    t1.[AJCC], t1.[ShifNum], t1.[FMN]

FROM 
    AppData.SCHED AS t1
JOIN
    AppData.SCHED AS tS ON t1.ShifNum = tS.ShifNum
                        AND t1.WorkTM = tS.WorkTM
                        AND t1.FMN = tS.FMN
WHERE
    t1.Year = 2018)

AS t1
    JOIN
        AppData.SCHED AS tS ON t1.ShifNum = tS.ShifNum
                            AND t1.WorkTM = tS.WorkTM
                            AND t1.FMN = tS.FMN
    WHERE
        t1.Year = 2019;
...