用于根据Unique字段将值从行填充到列的SQL查询 [英] SQL query to populate Values from rows to Columns based on Unique filed

查看:87
本文介绍了用于根据Unique字段将值从行填充到列的SQL查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,

我有一个视图,给出如下结果,

I have a view that giving the results as below,

AgreementKey

AgreementKey

已确认InvoiceNumber

Confirmed InvoiceNumber

原始InvoiceNumber

Original InvoiceNumber

RevenueTransaction TypeName

RevenueTransaction TypeName

CreditAmount

CreditAmount

DebitAmount

DebitAmount

RebillAmount

RebillAmount


5645238

9867000546

9897515417.00

Credit

-130135.59

NULL

NULL


5645238

9897515417

NULL

借记

NULL

130215.19

NULL


5645238

9897516538

9897515417.00

Rebill

NULL

NULL

120213.7154

在上述情况下,对于1份协议,有3份发票(Confirmedinv#)具有不同的交易类型。

In above case, for 1 Agreement there are 3 invoices (Confirmedinv#) with different transaction types.

第1条记录,Inv#9867000546是信用证发票和原始inv#列显示此信用发票的借记发票#

for 1 st record, Inv# 9867000546 is a credit invoice and the Original inv # column shows the debit invoice # for this credit invoice

现在,对于每条记录,我想填充最后3个Amount列,其中2个当前为NULL fileds 。

Now, for each record, I want to populate the last 3 Amount columns where 2 of them are currently NULL fileds.

例如,对于第一条记录,我想根据各自的确认/原始发票编号填写借记和重新计算金额。

For Example, for 1st record, i want to populate the Debit and rebill amounts based on their respective Confirmed/Original Invoice numbers.

预期结果如下, 

expected results are as below, 

AgreementKey

AgreementKey

已确认的InvoiceNumber

Confirmed InvoiceNumber

原始InvoiceNumber

Original InvoiceNumber

RevenueTransaction TypeName

RevenueTransaction TypeName

CreditAmount

CreditAmount

DebitAmount

DebitAmount

RebillAmount

RebillAmount


5645238

9867000546

9897515417.00

Credit

-130135.59

130215.19

120213.7154


5645238

9897515417

NULL

借记

-130135.59

130215.19

120213.7154


5645238

9897516538

9897515417.00

Rebill

-130135.59

130215.19

120213.7154

请帮助我如何获得预期的结果。

Please help me how can i get the expected results.

以下是查看代码,

推荐答案

创建表#C(AggKey CHAR(1),CREDITAM INT,DEBITAM INT)

INSERT INTO #C值('A', - 52,NULL)

INSERT INTO #C values('A',NULL,66)

INSERT INTO #C值('A',NULL,NULL)

INSERT INTO #C values('A',NULL,NULL)

$




SELECT * FROM #C



ALTER TABLE# C ADD ID INT IDENTITY(1,1)



SELECT AggKey,CREDITAM不为空时的情况

           那么CREDITAM

            ELSE(SELECT COALESCE(最高(CREDITAM),(选择TOP 1 CREDITAM  FROM #C WHERE CREDITAM不为空))

           FROM #C

          WHERE ID< = t.ID)

  &NBSP; &NBSP;   END AS CREDITAM,

   当DEBITAM不为空时的案例

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;那么DEBITAM

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; ELSE(SELECT COALESCE(最高(DEBITAM),(选择TOP 1 DEBITAM  FROM #C WHERE DEBITAM不为空))

           FROM #C

          WHERE ID< = t.ID)

  &NBSP; &NBSP;   END AS CREDITAM

  &NBSP; &NBSP;  

来自#C
CREATE TABLE #C (AggKey CHAR(1) ,CREDITAM INT,DEBITAM INT)
INSERT INTO #C values('A', -52,NULL)
INSERT INTO #C values('A', NULL,66)
INSERT INTO #C values('A',NULL,NULL)
INSERT INTO #C values('A', NULL,NULL)



SELECT * FROM #C

ALTER TABLE #C ADD ID INT IDENTITY(1,1)

SELECT AggKey,CASE WHEN CREDITAM is not null
            THEN CREDITAM
            ELSE (SELECT COALESCE(max(CREDITAM),(SELECT TOP 1 CREDITAM  FROM #C WHERE CREDITAM is not null))
                  FROM #C
                  WHERE ID <= t.ID)
       END AS CREDITAM,
   CASE WHEN DEBITAM is not null
            THEN DEBITAM
            ELSE (SELECT COALESCE(max(DEBITAM),(SELECT TOP 1 DEBITAM  FROM #C WHERE DEBITAM is not null))
                  FROM #C
                  WHERE ID <= t.ID)
       END AS CREDITAM
       
FROM #C


这篇关于用于根据Unique字段将值从行填充到列的SQL查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆