2017-10-12 62 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