Присвоить значение столбцу на основе нескольких условий - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть данные бухгалтерского учета в SQL. Это записи, сделанные для продажи, поэтому для каждой сделанной продажи существует также компенсационная запись для стоимости проданных товаров. В используемой нами системе учета она автоматически генерирует идентификатор транзакции в столбце TxnId только для строк продажи, а не для стоимости строк проданных товаров по неизвестной мне причине. Я извлекаю данные, используя следующий запрос:

  SELECT account,name, memo, debit,credit,amount,txnid,refnum,ROW_NUMBER()
                    OVER ( 
                      partition BY memo, refnum 
                      ORDER BY account,memo,amount desc) AS Row_Counter
  FROM [dbo].[Table] order by memo asc

Полученная таблица выглядит следующим образом:

Account                Name       Memo           Debit    Credit   Amount   TxnID      RefNum    Row_Counter 
Sales                Company A    Wingding 1     Null     855       855    5EASUC-X    12345        1
CostofGoodsSold      Company A    Wingding 1     -684     Null     -684    Null        12345        2
Sales                Company A    Wingding 2     Null     910       910    5EASUC-X    12345        1
CostofGoodsSold      Company A    Wingding 2     -850     Null     -850    Null        12345        2
Sales                Company A    Wingding 3     Null     760       760    5EASUC-X    12345        1
CostofGoodsSOld      Company A    Wingding 3     -665     Null     -665    Null        12345        2

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

Account                Name       Memo           Debit    Credit   Amount   TxnID      RefNum    Row_Counter  Newnum
Sales                Company A    Wingding 1     Null     855       855    5EASUC-X    12345        1         855
CostofGoodsSold      Company A    Wingding 1     -684     Null     -684    Null        12345        2         855
Sales                Company A    Wingding 2     Null     910       910    5EASUC-X    12345        1         910
CostofGoodsSold      Company A    Wingding 2     -850     Null     -850    Null        12345        2         910
Sales                Company A    Wingding 3     Null     760       760    5EASUC-X    12345        1         760
CostofGoodsSOld      Company A    Wingding 3     -665     Null     -665    Null        12345        2         760

Если у кого-то есть какие-либо предложения, они будут очень благодарны.

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Я понял, что вы захотите:

  SELECT account,name, memo, debit,credit,amount,txnid,refnum,ROW_NUMBER()
                    OVER ( 
                      partition BY memo, refnum 
                      ORDER BY account,memo,amount desc) AS Row_Counter
, SUM(Credit) OVER (PARTITION BY memo) as Newnum
  FROM [dbo].[Table] order by memo asc
1 голос
/ 29 апреля 2020

Используйте тот шаблон, который у вас есть, для числового значения:

                MIN(Credit) OVER (PARTITION BY memo, refnum) AS Newnum

MIN OVER не имеет порядка, только раздел. Также не было особой причины, по которой я выбрал MIN; SUM (как использовал Габриэль), MAX, AVG будут работать одинаково хорошо, потому что все они игнорируют нули, и кажется, что из ваших примеров данных есть только выбор из 1 оставшегося ненулевого значения

...