Tema: Re: Dar karta T-SQL select'as
Autorius: Jornada Del Muerto
Data: 2011-08-10 16:19:33
tai imt kaip baze reikia LK ir jungt left join L prie jos o tada tu irasu kur nebus L lentoje laukai bus Null ir kiekvienoj vietoj dek IsNull(laukas, reiksme_null_atveju_pvz_0) ir viskas...

"Rimokas" <rimasu@ut.lt> wrote in message news:j1t6ji$na6$1@trimpas.omnitel.net...
>     Aciu uz patarima . Isbandziau ...
> 
>> Tada jai ner kazkokio iraso likuc lentoje visi is tos lentos traukiami 
>> laukai bus NULL tai jei toliau darysii agregacija (tipo sum, count, avg ir 
>> t.t.. ) su jos laukais tai pradzioj statai funkcija IsNull(likuc.laukas, 
>> 0).
> 
>   Beda ta , kad paprastai L lentelej nera tokiu irasu , kuriu yra LK . Ir 
> butent ju nematau . Ir dar beda ta , kad ta "L" judejimo lentele yra kaip ir 
> pagrindine , likuciu lentele jungiama prie jos .
> 
>  Stai pilnas selectas :
> 
>      SELECT
>      DBO.INVENTTrans.ITEMID,
>      dbo.INVENTTABLE.ITEMNAME,
>      dbo.INVENTTABLE.ALNINVENTGROUP1,
>      DBO.INVENTTrans.DATEPHYSICAL,
> 
>      SUM ( IsNull( dbo.UTINVENTREMAINMONTH.INVENTREMAIN, 0 ) ) AS LQTY,
>      SUM ( IsNull( dbo.UTINVENTREMAINMONTH.COSTAMOUNT, 0 ) ) AS LSUM,
> 
>      SUM ( CASE WHEN DBO.INVENTTrans.DIRECTION = 1 and 
> DBO.INVENTTrans.DIRECTION <> NULL then DBO.INVENTTrans.QTY else 0 END ) AS 
> PQTY,
>      SUM ( CASE WHEN DBO.INVENTTrans.DIRECTION = 1 and 
> DBO.INVENTTrans.DIRECTION <> NULL then DBO.INVENTTrans.COSTAMOUNTPOSTED else 
> 0 END ) AS PSUM,
>      SUM ( CASE WHEN DBO.INVENTTrans.DIRECTION = 2 and 
> DBO.INVENTTrans.DIRECTION <> NULL then DBO.INVENTTrans.QTY else 0 END ) AS 
> IQTY,
>      SUM ( CASE WHEN DBO.INVENTTrans.DIRECTION = 2 and 
> DBO.INVENTTrans.DIRECTION <> NULL then DBO.INVENTTrans.COSTAMOUNTPOSTED else 
> 0 END ) AS ISUM,
> 
>      DBO.INVENTTrans.INVENTDIMID,
>      DBO.INVENTDIM.INVENTLOCATIONID,
>      DBO.INVENTDIM.CONFIGID,
>      DBO.INVENTDIM.INVENTBATCHID,
>      DBO.INVENTDIM.INVENTSERIALId
> 
>      INTO dbo.INVENTTRANS_AV
>      FROM dbo.INVENTTrans
> 
>      JOIN dbo.INVENTTABLE WITH (INDEX(itemidx))ON 
> dbo.INVENTTRANS.ITEMID=dbo.inventtable.itemid
>      JOIN DBO.INVENTDIM WITH (INDEX(INVENTDIMIDX)) ON 
> dbo.INVENTTrans.INVENTDIMID=DBO.INVENTDIM.INVENTDIMID
> 
>      LEFT JOIN dbo.UTINVENTREMAINMONTH ON
>        DBO.INVENTTrans.INVENTDIMID = dbo.UTINVENTREMAINMONTH.INVENTDIMID 
> and
>        DBO.INVENTTrans.ITEMID = dbo.UTINVENTREMAINMONTH.ITEMID and
>        dbo.UTINVENTREMAINMONTH.INVREMAINDATE >= '2011.07.01' and
>        dbo.UTINVENTREMAINMONTH.INVREMAINDATE <= '2011.07.31'
> 
>      Pagrindine problema , kaip suprantu , cia ... Nes join'as daromas tarp 
> "L" ir "LK" .  O "L" neturi tokiu irasu kaip "LK"
> 
>      WHERE
>      DBO.INVENTTrans.datephysical >='2011.07.01' and
>      DBO.INVENTTrans.datephysical <='2011.07.31' and
>      dbo.INVENTDIM.INVENTLOCATIONID = 'its'
> 
>      GROUP BY
>      DBO.INVENTTrans.ITEMID,
>      DBO.INVENTTABLE.ITEMNAME,
>      dbo.inventtable.ALNINVENTGROUP1,
>      DBO.INVENTTrans.DATEPHYSICAL,
>      DBO.INVENTTrans.INVENTDIMID,
>      DBO.INVENTDIM.INVENTLOCATIONID,
>      dbo.INVENTDIM.CONFIGID,
>      DBO.INVENTDIM.INVENTBATCHID,
>      DBO.INVENTDIM.INVENTSERIALID
> 
>  Cia where su datom ir 'its' skyrium laikinai , isbandymui , kad veiktu ... 
> :-)
> 
>> P.S. Tiesa nepakenciu uzklausu su keliom lentom ir be aliasu tai 
>> sualiasinau ;) L - lenta, LK - likuc, tiesiog skaitomumas uzklausos mazeja 
>> kada dar visas lentos name prie kiekvieno lauko eina.
> 
>  Pilnai suprantu ... :-)) Tik cia toks MS SQL Management Studio yra , tai 
> su juo bandau kazka isgaut . Rasosi su pilna sintakse neblogai , tik spek 
> nukilnot ... :-))
> 
>  Sirdingas dekui uz pagalba ...
> 
>