Как назначить значения на основе группировки строк в SQL? - PullRequest
0 голосов
/ 01 мая 2020

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

SELECT
    account,
    name, 
    memo, 
    debit,
    credit,
    amount,
    txnid,
    refnum,
    ROW_NUMBER() OVER (PARTITION BY memo, refnumber ORDER BY account,memo,abs(amount)) AS memo_group 
FROM [dbo].[Table] 
WHERE refnumber = '67175'

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

  Account                Name       Memo           Debit    Credit   Amount   TxnID      RefNum    Row_Counter 
Sales                Company A    Wingding 1     Null     855       855    5EASUC-X    12345        1
Sales                Company A    Wingding 1     Null     400       400    5EASUC-X    12345        2
CostofGoodsSold      Company A    Wingding 1     -650     Null     -650    Null        12345        3
CostofGoodsSold      Company A    Wingding 1     -200     Null     -200    Null        12345        4
Sales                Company A    Wingding 2     Null     760       760    5EASUC-X    12345        1
Sales                Company A    Wingding 2     Null     665       665    5EASUC-X    12345        2
CostofGoodsSold      Company A    Wingding 2     -600     Null     -600    Null        12345        3
CostofGoodsSold      Company A    Wingding 2     -465     Null     -465    Null        12345        4

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

    Account                Name       Memo           Debit    Credit   Amount   TxnID      RefNum    Row_Counter   New_Col
    Sales                Company A    Wingding 1     Null     855       855    5EASUC-X    12345        1         855
    Sales                Company A    Wingding 1     Null     400       400    5EASUC-X    12345        2         400
    CostofGoodsSold      Company A    Wingding 1     -650     Null     -650    Null        12345        3         855
    CostofGoodsSold      Company A    Wingding 1     -200     Null     -200    Null        12345        4         400
    Sales                Company A    Wingding 2     Null     760       760    5EASUC-X    12345        1         760
    Sales                Company A    Wingding 2     Null     665       665    5EASUC-X    12345        2         665
    CostofGoodsSold      Company A    Wingding 2     -600     Null     -600    Null        12345        3         760
    CostofGoodsSold      Company A    Wingding 2     -465     Null     -465    Null        12345        4         665

Я пытался использовать для этого функции windows, но безуспешно. У кого-нибудь есть предложения по способу сделать это?

1 Ответ

0 голосов
/ 01 мая 2020

Вы бы использовали комбинацию CTE и оконных функций. После того, как вы заказали их в своем CTE, вы можете настроить новый столбец, используя функцию LAG, которая копирует данные из предыдущего ряда «до тех пор, пока не увидит новый продукт». Это также предполагает, что у вас есть PrimaryKey, такой как ProductNo, который объединит их. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...