Tema: Re: Dar karta T-SQL select'as
Autorius: Rimokas
Data: 2011-08-10 08:57:06
     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 ...