2017-10-12 119 views
1

我有一张桌子,里面有一个tendertype,它显示哪些付款已经在salesrow上完成了。填写列中的缺失值

UPDATE:对不起,我不太清楚 - 它应该是按SalesHeader因为另一salesheader可以有不同的值

例1我只有一个付款记录。这应该是 目前在所有记录

例2我有2笔支付所有记录。但我应该只拿其中一个 并填写空位,但保持原样。

的样本数据

DECLARE @Table TABLE (
SalesHeader varchar(10),Amount int,TenderType nvarchar(50) 
) 

INSERT INTO @Table 
VALUES 

('A',1 ,'MasterCard'), 
('A',10 ,NULL  ), 
('A',100 ,NULL  ), 
('A',10 ,NULL  ), 
('A',1 ,NULL  ), 
('B',1 ,'CASH'  ), 
('B',100 , NULL  ) 
select * from @Table 

Image that shows how it looks like

有我试图到目前为止什么?

SELECT 
    [Fakturanummer] as SalesHeader 

    ,[Omsætning] as Amount 

    ,a.[TenderType] 
    ,x.TenderType 
FROM [CE_COG-BI-EDW].[dm].[SALG_TRANSAKTIONER] a 

CROSS APPLY(
select top 1 TenderType from [CE_COG-BI-EDW].[dm].[SALG_TRANSAKTIONER] t 
where TenderType is not null and a.Fakturanummer = t.Fakturanummer 
)x 

where DATASET = 'se' and Fakturanummer in ('5133324','104893') 
order by Fakturanummer 

enter image description here

实施例1:

SalesHeader | Amount | TenderType 
---------------------------------------- 
A    1   MasterCard 
A    10   NULL 
A    100   NULL 
A    10   NULL 
A    1   NULL 
B    10   CASH 
B    100   NULL 

期望的结果1

SalesHeader | Amount | TenderType 
---------------------------------------- 
A    1   MasterCard 
A    10   MasterCard 
A    100   MasterCard 
A    10   MasterCard 
A    1   MasterCard 
B    1   CASH 
B    100   CASH 

例2:

SalesHeader | Amount | TenderType 
---------------------------------------- 
A    1   MasterCard 
A    10   CASH 
A    100   NULL 
A    10   NULL 
A    1   NULL 

期望的结果2

SalesHeader | Amount | TenderType 
---------------------------------------- 
A    1   MasterCard 
A    10   CASH 
A    100   MasterCard 
A    10   MasterCard 
A    1   MasterCard 

我试着用一些CROSS APPLY,但我不能让我的头周围。

+0

是第一个例子左连接? –

+0

@RyanGadsdon林不知道你的意思。它如何我的表看起来像 – plaidDK

+0

我没有downvote –

回答

2

唉。它有助于写下它。这让我的头脑清醒

看来我应该这样做,并感谢@apomene评论与顶端1 - 我想通了。

SELECT 
    [Fakturanummer] as SalesHeader 

    ,[Omsætning] as Amount 

    ,a.[TenderType] 
    ,case when a.TenderType IS not null then a.TenderType else x.TenderType 
end as newTenderType 
FROM [CE_COG-BI-EDW].[dm].[SALG_TRANSAKTIONER] a 

CROSS APPLY(
    select top 1 TenderType from [CE_COG-BI-EDW].[dm].[SALG_TRANSAKTIONER] t 
where TenderType is not null and a.Fakturanummer = t.Fakturanummer 
)x 

where DATASET = 'se' and Fakturanummer in ('5133324','104893') 
order by Fakturanummer 
2
UPDATE myTABLE 
SET TenderType = (
     SELECT TOP 1 TenderType 
     FROM myTable 
     WHERE TenderType IS NOT NULL 
     ) 
WHERE TenderType IS NULL 
+0

对不起,看看我的更新。我忘了写我有不同tendertypes的serveral销售。所以它只应该影响所需的salesheader – plaidDK