Hej Ifall du använder left join så kommer du att få poster för alla värden, och där det inte fanns någon matchande post i tabellen du joinar in får du null i de fälten. Jag tror nog tyvärr inte det finns någon vettig lösning till ditt problem. Antingen löses det i applikationen som använder detta, eller så får man nog försöka hantera problemet annorlunda. Så:Lägga ditt rader som saknas
Jag har följande sql i en procedur
SQL koden
-----------------------------------------------------------------------
select mv.idmatris, m.aktuellperiod, mv.period, mv.idvariabel, v.namn, mv.varde
into #temp22
from matrisvarde mv
join matris m
on m.idmatris = mv.idmatris
join variabel v
on mv.idvariabel = v.idvariabel
where mv.period='2003k1' and mv.idmedlemkontoslag=74 -- and mv.idmedlemkonto=1 and mv.idmedlemsektor=9'
order by mv.idvariabel, mv.idmatris desc
------------------------------------------------------------------------
Mitt problem är att jag nu måste hitta en lösning för att få antalet idmatris stämma överens med respektive idvariabel.
tex som i tabellen nedan så finns alla varibler med i tre olika idmatriser förutom idvariabel 904 som bara finns med i två. Det jag måste göra är att få in en rad med idmatris 175 och idvariabel 904. Detta är för att jag skall för varje idvariabel jämföra värdet mellan dom. Finns det då en variabel som saknas i en idmatris så måste jag jämföra med en som är dittlagd.
Grejen är att jag vill få systemet att tro att idvariabel finns med i idmatris 175 så jag kan jämföra 216 med 175 som då skall ha ett null värde så att diffen blir 100% sedan 175 med 172 men eftersom det har ett null värde så skall det inte tas med sedan forsätter man så tills idvariabel inte är lika längre.
Resultatet kan se ut som nedan
-------------------------------------------------------------------------------------
idmatris period period2 idvariabel namn värde
216,00 2004k1 2003k1 903,00 OV_S0_M_B9F_S0 0,00
175,00 2004k1 2003k1 903,00 OV_S0_M_B9F_S0 0,00
172,00 2004k1 2003k1 903,00 OV_S0_M_B9F_S0 0,00
216,00 2004k1 2003k1 904,00 UB_S0_M_B9F_S0 0,00
172,00 2004k1 2003k1 904,00 UB_S0_M_B9F_S0 0,00
216,00 2004k1 2003k1 905,00 OK_S0_M_B9F_S121 0,00
175,00 2004k1 2003k1 905,00 OK_S0_M_B9F_S121 0,00
172,00 2004k1 2003k1 905,00 OK_S0_M_B9F_S121 0,00
216,00 2004k1 2003k1 906,00 TR_S0_M_B9F_S121 0,00
175,00 2004k1 2003k1 906,00 TR_S0_M_B9F_S121 0,00
172,00 2004k1 2003k1 906,00 TR_S0_M_B9F_S121 0,00
-----------------------------------------------------------------------------------
Lite komplicerat att förklara hoppas någon fattar annars är det bara att fråga.
/JoakimSv: Lägga ditt rader som saknas
Sv: Lägga ditt rader som saknas
Sv: Lägga ditt rader som saknas
select m.idmatris, m.aktuellperiod, mv.period, v.idvariabel, v.namn, mv.varde
into #temp22
from matrisvarde mv
right join matris m
on m.idmatris = mv.idmatris
right join variabel v
on mv.idvariabel = v.idvariabel
where mv.period='2003k1' and mv.idmedlemkontoslag=74 -- and mv.idmedlemkonto=1 and mv.idmedlemsektor=9'
order by v.idvariabel, m.idmatris desc
Resultat:
-------------------------------------------------------------------------------------
idmatris period period2 idvariabel namn värde
216,00 2004k1 2003k1 903,00 OV_S0_M_B9F_S0 0,00
175,00 2004k1 2003k1 903,00 OV_S0_M_B9F_S0 0,00
172,00 2004k1 2003k1 903,00 OV_S0_M_B9F_S0 0,00
216,00 2004k1 2003k1 904,00 UB_S0_M_B9F_S0 0,00
175,00 2004k1 null 904,00 UB_S0_M_B9F_S0 null
172,00 2004k1 2003k1 904,00 UB_S0_M_B9F_S0 0,00
216,00 2004k1 2003k1 905,00 OK_S0_M_B9F_S121 0,00
175,00 2004k1 2003k1 905,00 OK_S0_M_B9F_S121 0,00
172,00 2004k1 2003k1 905,00 OK_S0_M_B9F_S121 0,00
216,00 2004k1 2003k1 906,00 TR_S0_M_B9F_S121 0,00
175,00 2004k1 2003k1 906,00 TR_S0_M_B9F_S121 0,00
172,00 2004k1 2003k1 906,00 TR_S0_M_B9F_S121 0,00
-----------------------------------------------------------------------------------