Как добавить новый столбец, содержащий ZScore в SQL - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь обновить столбец с именем [Z Score] для моей таблицы в SQL.Я написал код для создания нового столбца в запросе SELECT, как показано ниже:

SELECT cd.*
FROM (
       SELECT [Cardholder Name], [Transaction Date], [Merchant], 
       [Debit Amount], 
       (
        [Debit Amount] - 
        AVG([Debit Amount]) OVER ()) / (STDEV([Debit Amount]) OVER ()
       ) as [ZScore]
       FROM ['PCard Output']
     ) cd;

При этом я теряюсь, когда дело доходит до использования запроса UPDATE для фактического добавления данных в столбец [Z Score].Я использую SQL Server 17. Буду признателен за любую помощь!

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Просто:

UPDATE T
SET YourColumn = cd.[ZScore]
FROM 
(
    SELECT [Cardholder Name], 
           [Transaction Date], 
           [Merchant], 
           [Debit Amount], 
           ([Debit Amount] - AVG([Debit Amount]) OVER ()) / (STDEV([Debit Amount]) OVER ()) as [ZScore]
    FROM ['PCard Output']
) cd INNER JOIN YourTable T ON cd.ID = T.ID;

Как примечание, я не думаю, что вам нужны другие столбцы, которые вы выбираете, поэтому ваш запрос может выглядеть так:

UPDATE T
SET YourColumn = cd.[ZScore]
FROM 
(
    SELECT ([Debit Amount] - AVG([Debit Amount]) OVER ()) / (STDEV([Debit Amount]) OVER ()) as [ZScore]
    FROM ['PCard Output']
) cd INNER JOIN YourTable T ON cd.ID = T.ID;

или

UPDATE YourTable
SET YourColumn = 
(
    SELECT ([Debit Amount] - AVG([Debit Amount]) OVER ()) / (STDEV([Debit Amount]) OVER ()) as [ZScore]
    FROM ['PCard Output']
);
0 голосов
/ 11 октября 2018

Вы можете легко сделать это с обновляемым CTE:

with toupdate as (
      select cd.*,
             ([Debit Amount] - AVG([Debit Amount]) OVER ()) / STDEV([Debit Amount]) OVER () as new_ZScore
      from ['PCard Output'] cd
     )
update toupdate
    set ZScore = new_Zscore;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...