Search code examples
sqlsql-serverselectnull

How to fill a NULL in a column with the value of a different line based on same id of a different table


This is my SQL query:

SELECT 
    GXFINENTRYLINES.GXID, GXFINENTRY.GXID FINENTRYGXID, 
    GXTRADER.GXNAME, GXFINENTRYLINES.GXLINENUM,  
    GXFINENTRYLINES.GXTRNVALUE  
FROM 
    GXFINENTRYLINES  
LEFT JOIN 
    GXTRADEENTRY ON GXFINENTRYLINES.GXTENTID = GXTRADEENTRY.GXID  
LEFT JOIN 
    GXFINENTRY ON GXFINENTRYLINES.GXFENTID = GXFINENTRY.GXID  
INNER JOIN 
    GXFINENTRYTYPE ON GXFINENTRY.GXFETPID = GXFINENTRYTYPE.GXID  
LEFT JOIN 
    GXTRADER ON GXFINENTRYLINES.GXTRDRID = GXTRADER.GXIDyour`

And the result is like this :

GXFINENTRYLINES.GXID FINENTRYGXID GXNAME LINENUM GXTRNVAL
BA4A846A-2D3E-7974-DC0B-018A02C26931 D0CFE900-8A25-BF6E-1125-018A02C226F0 NAME_A -1 3800.00
5BBB6000-34FE-43B7-C173-018A02C27527 D0CFE900-8A25-BF6E-1125-018A02C226F0 NULL 1 3300.00
C8529015-DC40-EA1E-36A1-018A02E3F088 D0CFE900-8A25-BF6E-1125-018A02C226F0 NULL 2 500.00
BE224ED1-A770-62C3-DB71-0185DDB1B62C 2E1CE68A-5D4A-BBD8-021F-0185DDB0CB13 NAME_B -1 2500.00
95F1F307-143F-8864-A987-0185DDB1F457 2E1CE68A-5D4A-BBD8-021F-0185DDB0CB13 NULL 1 2500.00

But what I try to find and I want as a result is to have the name in GXNAME and not NULL where LINENUM <> -1 and where the id in column B (FINENTRYGXID) is the same.

The result should look like this:

GXFINENTRYLINES.GXID FINENTRYGXID GXNAME LINENUM GXTRNVAL
BA4A846A-2D3E-7974-DC0B-018A02C26931 D0CFE900-8A25-BF6E-1125-018A02C226F0 NAME_A -1 3800.00
5BBB6000-34FE-43B7-C173-018A02C27527 D0CFE900-8A25-BF6E-1125-018A02C226F0 NAME_A 1 3300.00
C8529015-DC40-EA1E-36A1-018A02E3F088 D0CFE900-8A25-BF6E-1125-018A02C226F0 NAME_A 2 500.00
BE224ED1-A770-62C3-DB71-0185DDB1B62C 2E1CE68A-5D4A-BBD8-021F-0185DDB0CB13 NAME_B -1 2500.00
95F1F307-143F-8864-A987-0185DDB1F457 2E1CE68A-5D4A-BBD8-021F-0185DDB0CB13 NAME_B 1 2500.00

I would be grateful for your help !


Solution

  • Without seeing some sample data it's not possible to be be concise, however I suspect you could use a windowed aggregate for the column here:

    ..., max(GXTRADER.GXNAME) over(partition by FINENTRYGXID) as GXNAME,...