none
CASE WHEN Yapısında Null olan sonuçları sıfıra çevirme RRS feed

  • Soru

  • Merhaba,

     MERKEZ_STOK ve IADE_STOK alanlarına gelen sonuçlardan NULL olanları sıfır veya boşluk ile değiştirmek istiyorum.

    Aşağıdaki sorguda denedim ama yine boş olanlara NULL yazıyor.

    SELECT  PRODUCT_ID,UR.EXT_CODE, UR.NAME,
    CASE WAREHOUSE_ID WHEN 3 THEN ISNULL(QUANTITY,0) END AS MERKEZ_STOK ,
    CASE WAREHOUSE_ID WHEN 1 THEN ISNULL(QUANTITY,0) END AS IADE_STOK,
    TIME  FROM PRODUCT_WAREHOUSE_STOCK AS TR 
    INNER JOIN PRODUCT AS UR ON TR.PRODUCT_ID=UR.ID WHERE QUANTITY > 0 

    17 Ekim 2015 Cumartesi 11:22

Yanıtlar

  • SELECT  PRODUCT_ID,UR.EXT_CODE, UR.NAME,
    CASE WAREHOUSE_ID WHEN 3 THEN ISNULL(QUANTITY,0) ELSE 0 END AS MERKEZ_STOK ,
    CASE WAREHOUSE_ID WHEN 1 THEN ISNULL(QUANTITY,0) ELSE 0 END AS IADE_STOK,
    TIME  FROM PRODUCT_WAREHOUSE_STOCK AS TR 
    INNER JOIN PRODUCT AS UR ON TR.PRODUCT_ID=UR.ID WHERE QUANTITY > 0 

    • Yanıt Olarak Öneren Soner KOYLU 17 Ekim 2015 Cumartesi 14:47
    • Yanıt Olarak İşaretleyen Serkan Canseven 19 Ekim 2015 Pazartesi 07:07
    17 Ekim 2015 Cumartesi 13:27

Tüm Yanıtlar

  • SELECT  PRODUCT_ID,UR.EXT_CODE, UR.NAME,
    CASE WAREHOUSE_ID WHEN 3 THEN ISNULL(QUANTITY,0) ELSE 0 END AS MERKEZ_STOK ,
    CASE WAREHOUSE_ID WHEN 1 THEN ISNULL(QUANTITY,0) ELSE 0 END AS IADE_STOK,
    TIME  FROM PRODUCT_WAREHOUSE_STOCK AS TR 
    INNER JOIN PRODUCT AS UR ON TR.PRODUCT_ID=UR.ID WHERE QUANTITY > 0 

    • Yanıt Olarak Öneren Soner KOYLU 17 Ekim 2015 Cumartesi 14:47
    • Yanıt Olarak İşaretleyen Serkan Canseven 19 Ekim 2015 Pazartesi 07:07
    17 Ekim 2015 Cumartesi 13:27
  • Eyvallah.
    17 Ekim 2015 Cumartesi 14:41
  • Peki Merkez stok ve İade Stoğu tek satır üzerinde nasıl gösterebiliriz.

    Aynı ürün için hem merkez stok varsa hemde iade stok varsa ikisinide farklı satırda gösteriyor.


    ürün kodu   Merkez Stok      İade Stok                                                               
    
    101201         1050               0  
    101201           0               15              

    gibi gösteriyor.

    Oysaki ben 

    ürün kodu   Merkez Stok      İade Stok                                                               
    
    101201         1050               15  
                     
    şeklinde istiyorum.

    19 Ekim 2015 Pazartesi 10:28
  • group by  kullanarak yapabilirsin.

    kdrgny@outlook.com

    19 Ekim 2015 Pazartesi 10:34
  • Verinin tamamini gosteriyor olsaydin, SUM() ile yapabilirdin. Ancak SQL'den gordugum kadariyla sen kismi sonucu gosteriyorsun ve sanki normal sonuca uygulanamazmis gibi gorunuyor ( O [time] ne mesela).
    19 Ekim 2015 Pazartesi 10:45
  • Hocam aşağıdaki kod ile açtığım konu başlığı çözülüyor ama iş konu başlığı dışına çıktı. 

    sonucu yukarıda yazdığım gibi alıyorum. Ben tek satırda Merkez stok ve iade stoğu görüntülensin istiyorum.

    SELECT  PRODUCT_ID,UR.EXT_CODE, UR.NAME,
    CASE WAREHOUSE_ID WHEN 3 THEN QUANTITY ELSE 0 END MERKEZ_STOK,
    CASE WAREHOUSE_ID WHEN 1 THEN QUANTITY ELSE 0 END  IADE_STOK, 
    TIME  FROM PRODUCT_WAREHOUSE_STOCK AS TR
    INNER JOIN PRODUCT AS UR ON TR.PRODUCT_ID=UR.ID WHERE QUANTITY > 0 ORDER BY EXT_CODE 

    19 Ekim 2015 Pazartesi 12:09
  • Ben de diyorum ki, gercek sonuclarin tamamini gorebilseydik fikrimiz olurdu. Bana sanki olmayacak bir seyin pesindeymissin gibi geldi. Orada gosterdigin kolonlar disinda, gostermedigin EXT_CODE, NAME, TIME gibi kolonlar var. O kolonlarin icerigi eger her ikisinde de ayni ise o zaman basitce bunu SUM() sorgusu seklinde yazarsin olur biter:

    SELECT  TR.PRODUCT_ID, UR.EXT_CODE, UR.NAME,
            SUM(CASE WHEN WAREHOUSE_ID = 3 THEN QUANTITY
                     ELSE 0
                END) AS MERKEZ_STOK, SUM(CASE WHEN WAREHOUSE_ID = 1 THEN QUANTITY
                                              ELSE 0
                                         END) AS IADE_STOK, [TIME]
    FROM    PRODUCT_WAREHOUSE_STOCK AS TR
    INNER JOIN PRODUCT AS UR ON TR.PRODUCT_ID = UR.ID
    GROUP BY TR.PRODUCT_ID, UR.EXT_CODE, UR.NAME, [TIME]
    ORDER BY EXT_CODE; 
    Not: IsNULL() basliga uymus ama gereksiz zaten.


    • Düzenleyen CetinBasoz 19 Ekim 2015 Pazartesi 14:10
    19 Ekim 2015 Pazartesi 14:08
  • Hocam işin içinden çıkamadım.  Sonuç bu.

    
    
    527455	101001013	   aaaaaaaa	  0.000000	7.000000	2015-10-10 12:18:15.297
    527455	101001013	   aaaaaaaa	 115.000000	0.000000	2015-10-15 16:56:29.880
    627957	101001020	   bbbbbbbb	49.000000	0.000000	2015-10-09 15:25:49.683
    2546	       101001030	   cccccccc	 0.000000	     2.000000	2015-10-03 16:10:37.380
    2546	       101001030	   cccccccc	 88.000000	0.000000	2015-10-15 16:56:29.880


    İki Tablo var. Tablonun birinde (PRODUCT_WAREHOUSE_STOCK) Stokların son halleri derlenmiş bir tablo var. Bu tabloda kullandığım alanlar  

    PRODUCT_ID Her bir  ürünü temsil ediyor. Örneğin 1646 ıd li ürünü çağırdığımda 3 satır sonuç geliyor. bu satırların biri merkez stoğu, biri iade stoğunu temsil ediyor.

    Bu bilgilerde WAREHOUSE_ID alanında saklı 3, 2 ve 1 rakamlarından ibaret.

    3 rakamının olduğu satır merkez stoğu ifade ediyor stok mitarıda QUANTITY sütununda bulunuyor.

    1 rakamı da İade stoğunu ifade ediyor oda yine QUANTITY sütununda saklanıyor.

    2 no yu bilmiyorum kullanmıyorum zaten.

    Diğer tabloda (PRODUCT) ise EXT.CODE ürün kodunun bulunduğu alan, NAME ürün adının bulunduğu alan.

    bu tabloların birbiri ile ilişkisi PRODUCT_WAREHOUSE_STOCK.PRODUCT_ID = PRODUCT.ID şeklindedir.

    yazdığımız kodda ters olan nedir çözemedim.












    19 Ekim 2015 Pazartesi 19:12
  • Tablolarin yapilarini ve ornek datayi kod olarak verirsen bakalim. Kod seklinde vermek icin SQLFiddle ya da T-SQL Flex kullanabilirsin. 
    19 Ekim 2015 Pazartesi 19:19
  • Peki Merkez stok ve İade Stoğu tek satır üzerinde nasıl gösterebiliriz.

    Aynı ürün için hem merkez stok varsa hemde iade stok varsa ikisinide farklı satırda gösteriyor.


    ürün kodu   Merkez Stok      İade Stok                                                               
    
    101201         1050               0  
    101201           0               15              

    gibi gösteriyor.

    Oysaki ben 

    ürün kodu   Merkez Stok      İade Stok                                                               
    
    101201         1050               15  
                     
    şeklinde istiyorum.

    oncelikle soruya bir id degeri vermelisin 

    cunki sonucda dublicate sonucla karsilasicaksin ve case de else sartina bir soru daha ekliyceksin yani sql bize bu imkanlari verir

    ben senin tablonun kolonlarini ve iceriklerini bilmediim icin yeni tablo yaratdim ve sonucu rahatlikla aldim

    modele bakib kendi projende rahatlikla sonuca vara bilirsin

    create table t1
    (id int not null identity(1,1),
    urun int,
     merkezstock int,
     iade_stock int)
    
     insert into t1
     (urun,merkezstock,iade_stock)
     select 102201,1050,0
     union all
     select 102201,0,15
    
     select*from t1;
    
     with tabl (id,[urun],[merkezstock],[iade_stock])
     as( 
    
     select id,[urun]=case when urun <>0 then urun else (select urun from t1 where urun<>0) end ,
      [merkezstock]=case when merkezstock <> 0 then merkezstock else (select merkezstock from t1 where merkezstock<>0) end ,
      [iade_stock]=case when iade_stock <> 0 then iade_stock else (select iade_stock from t1 where iade_stock<>0) end
       from t1
       )  
       select max(id),[urun],[merkezstock],[iade_stock] from tabl group by [urun],[merkezstock],[iade_stock]
    
    drop table t1
    
    
    (2 row(s) affected)
    id          urun        merkezstock iade_stock
    ----------- ----------- ----------- -----------
    1           102201      1050        0
    2           102201      0           15
    
    
    (2 row(s) affected)
    
                urun        merkezstock iade_stock
    ----------- ----------- ----------- -----------
    2           102201      1050        15
    
    (1 row(s) affected)
    
    
       
    
       
    

    27 Ekim 2015 Salı 21:21
  • @Natig Gurbanov,

    Bu dogru bir yontem olmamis. Mesela sadece t1 insert kismini degistirip deneyin:

    INSERT INTO t1( urun, merkezstock, iade_stock )
    VALUES 
    ( 102201, 1050, 0 ), ( 102201, 0, 15 ),
    ( 102202, 1050, 0 ), ( 102202, 0, 15 );

    27 Ekim 2015 Salı 21:44
  • @Natig Gurbanov,

    Bu dogru bir yontem olmamis. Mesela sadece t1 insert kismini degistirip deneyin:

    INSERT INTO t1( urun, merkezstock, iade_stock )
    VALUES 
    ( 102201, 1050, 0 ), ( 102201, 0, 15 ),
    ( 102202, 1050, 0 ), ( 102202, 0, 15 );

    oncelikle dikkatiniz icin tesekkurler

    problemin ismini Case koydugu icin degerli kardesim bende o yuzden 

    Case in gucunu gostermek istedim

    ama hata 

    Msg 512, Level 16, State 1, Line 19
    Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

    olduuna gore benim tavsiyem bu tur konularin cozumunu Case de aramamasidir ,sql 2005 den sonra zaten cross apply yi onermis microsoft ama ben yine de vizual tablolara deger veriyorum 

    sizin bana sundugunuz verileri insert edib cok rahatlikla neticeyi elde bilirsiniz

    create table t1
    (id int not null identity(1,1),
    urun int,
     merkezstock int,
     iade_stock int)
    
    
    INSERT INTO t1( urun, merkezstock, iade_stock )
    VALUES 
    ( 102201, 1050, 0 ), ( 102201, 0, 15 ),
    ( 102202, 1050, 0 ), ( 102202, 0, 15 );
    
    
    
        select*from t1
      
      with ct1
      as
      ( select urun as urun1 ,merkezstock as merkezstock1 ,iade_stock as iade_stock1 from t1 where merkezstock<>0)
      ,
      ct2 
      as ( select urun as urun2 ,merkezstock as merkezstock2 ,iade_stock as iade_stock2   from t1 where iade_stock<>0)
      
        select ct1.urun1,ct1.merkezstock1,ct2.iade_stock2 from ct1 left join ct2 on ct1.urun1=ct2.urun2
    
    drop table t1
    
    
    
    
    id          urun        merkezstock iade_stock
    ----------- ----------- ----------- -----------
    1           102201      1050        0
    2           102201      0           15
    3           102202      1050        0
    4           102202      0           15
    
    (4 row(s) affected)
    
    
     urun1       merkezstock1 iade_stock2
    ----------- ------------ -----------
    102201      1050         15
    102202      1050         15
    
    (2 row(s) affected)
    

    28 Ekim 2015 Çarşamba 00:20
  • Sayın Natig Gurbanov hocam öncelikle ilginize teşekkürler.

    Id vermek sorunu çözmedi sanırım. Bir sonraki örneğinize göre uyarladım. Ancak sonuç değişmedi. 

    Ben şu şekilde yapmıştım. Burada değeri sıfır olmayan Merkez stokların hepsini listeliyorum ve yanınada iade stoklarını listeliyorum. Ancak Merkez stok sıfır olan ürünlerde iade var ise bu seferde onları listeleyemiyorum.

    WITH IAD AS (SELECT PRODUCT_ID, QUANTITY FROM PRODUCT_WAREHOUSE_STOCK AS TR 
    WHERE WAREHOUSE_ID=1  AND QUANTITY > 0) 
    
    
    SELECT TR.PRODUCT_ID,EXT_CODE,NAME,TR.QUANTITY, IA.QUANTITY,TR.TIME 
    FROM PRODUCT_WAREHOUSE_STOCK AS TR
    INNER JOIN PRODUCT AS PR ON  TR.PRODUCT_ID=PR.ID LEFT JOIN IAD AS IA ON IA.PRODUCT_ID=PR.ID 
    WHERE WAREHOUSE_ID=3  AND TR.QUANTITY > 0    ORDER BY EXT_CODE

    Sizin örneğinize uyarladığım da aşağıdaki gibi. Ama dediğim gibi sonuç alamadım. Sizin örneğinizle ilişkilendirdiğinizde Az çok kodlardan anlarsınız ne yapmak istediğimi. Sizin son örneğinizdeki sonucu bulmaya çalışıyorum. Ama olmuyor.

    WITH MRK AS (SELECT  PRODUCT_ID,UR.EXT_CODE AS KOD1, UR.NAME AS NAME1, 
    CASE WAREHOUSE_ID WHEN 3 THEN QUANTITY ELSE 0 END AS MERKEZ_STOK1 , 
    CASE WAREHOUSE_ID WHEN 1 THEN QUANTITY ELSE 0 END AS IADE_STOK1  
     FROM PRODUCT_WAREHOUSE_STOCK AS TR  
    INNER JOIN PRODUCT AS UR ON TR.PRODUCT_ID=UR.ID WHERE QUANTITY <> 0),
    
    IAD AS ( SELECT  PRODUCT_ID,UR.EXT_CODE AS KOD2, UR.NAME AS NAME2, 
    CASE WAREHOUSE_ID WHEN 3 THEN QUANTITY ELSE 0 END AS MERKEZ_STOK2 , 
    CASE WAREHOUSE_ID WHEN 1 THEN QUANTITY ELSE 0 END AS IADE_STOK2  
     FROM PRODUCT_WAREHOUSE_STOCK AS TR 
    INNER JOIN PRODUCT AS UR ON TR.PRODUCT_ID=UR.ID WHERE QUANTITY <> 0)
    
    SELECT MRK.KOD1, MRK.NAME1,MRK.MERKEZ_STOK1	,IAD.IADE_STOK2 FROM MRK LEFT JOIN IAD ON MRK.KOD1=IAD.KOD2


    • Düzenleyen TuranBozbek 28 Ekim 2015 Çarşamba 08:58
    28 Ekim 2015 Çarşamba 08:41
  • Sanirim soruna cok yuzeysel bakiyorsunuz. Oncelikle, yukarida anlatmaya calistigim gibi, cozumu olmayabilir. Orijinal soruya bakarsaniz, cozumu yok gibi, unique olmayan cok sayida kolon var ve buna ragmen onlarin nasil 2 satira indirilecegi karanlik. Ornek tablolar ve veri olmadigi icin de bu soru tikandi.

    Sizin verdiginiz cozum yeni bir bandaj ve rahatlikla bozuluyor. Ornegin:

    INSERT  INTO t1 ( urun, merkezstock, iade_stock )
    VALUES  ( 102201, 1050, 0 ),
            ( 102201, 0, 15 ),
            ( 102202, 1000, 0 ),
            ( 102202, 1050, 0 ),
            ( 102202, 0, 15 );
    

    Daha bu tabloda o code, name, time kolonlari yok bile. Isin icine o kolonlar girince bozuluyor zaten is. Yoksa CTE'ye bile gerek yok 20 yil onceki SQL databaselerde bile gecerli olan bir group by + sum() ile biterdi is.

    28 Ekim 2015 Çarşamba 09:21
  • Haklısınız hocam tablo birleştirince karışıyor. 

    Yapacak bişey yok. Ellerinize sağlık. Olurda bir gün farklı bir yol bulup çözersem paylaşırım.

    28 Ekim 2015 Çarşamba 09:30
  • Ya ben neden cozumu yok diye dusunuyorum sana soyleyeyim, herhalde bastan beri anlasilmadi. Soyle bir sonuc varsa (tablo yapilari ve ornek veriyi hep gizlediginden olup olamayacagini bilemiyoruz, sadece hayal gucumuze kaliyor) :

    PRODUCT_ID, EXT_CODE, NAME, MERKEZ_STOK , IADE_STOK, TIME
    ----------- --------  ----- -----------   ---------  -------
    1           1         P1    1000              0      2015/1/1
    1           1         P1       0            150      2015/1/1
    1           1         P1    2000              0      2015/2/1
    1           1         P1       0            250      2015/2/1
    1           2         P12   3000              0      2015/1/1
    1           2         P12      0            350      2015/1/1

    Bunun cevabi elinde kagit kalem olsa ne olacak. Sorun burada.

    28 Ekim 2015 Çarşamba 10:01
  • Hocam en iyisi ben size 2 ayrı tablonun da kod ile örneğini  oluşturarak göndereyim. Birde o şekilde bakın isterseniz. 

    Eğer bu veri tabanından programa rapor halinde çekebiliyorsa yazılımcılar, burada da mümkün olmalı diye düşünüyorum.

    Tablo yapıları ve kodları aşağıdaki gibidir. Sonuç olarak her ürün çeşidi 1 satır yer kaplamalıdır. 


    create table stoklar
    (ID	 int not null identity(1,1),
     WAREHOUSE_ID int,
    PRODUCT_ID int,
    QUANTITY int)
    
    
    
    INSERT INTO stoklar( WAREHOUSE_ID, PRODUCT_ID, QUANTITY )
    VALUES 
    ( 3, 20, 110 ), ( 2, 20, 0 ), ( 1, 20, 15 ), 
    ( 3, 21, 0 ), ( 2, 21, 0 ),( 1, 21, 13 ),
    ( 3, 22, 187 ),( 2, 22,0 ),( 1, 22, 3 ), 
    ( 3, 23, 160 ), ( 2, 23, 0 ),( 1, 23, 0 ),
    ( 3, 24, 205 ), ( 2, 24, 0 ),( 1, 24, 0 )
    
    
    
    
    
    
    
    
    create table urunler
    (IDI	 int not null identity(1,1),
     ID int,
    EXT_CODE int,
    NAME Char(20))
    
    
    
    INSERT INTO urunler( ID, EXT_CODE, NAME )
    VALUES 
    
    ( 21, 10110, 'A urunu' ), ( 20, 10211, 'B urunu' ), ( 22, 10215,'C urunu' ), 
    ( 23, 10331, 'D urunu' ), ( 24, 10452,'E urunu' )
    
    
    
    
    
    WITH MRK AS (SELECT  PRODUCT_ID,UR.EXT_CODE AS KOD1, UR.NAME AS NAME1, 
    CASE WAREHOUSE_ID WHEN 3 THEN QUANTITY ELSE 0 END AS MERKEZ_STOK1 , 
    CASE WAREHOUSE_ID WHEN 1 THEN QUANTITY ELSE 0 END AS IADE_STOK1  
     FROM stoklar AS TR  
    INNER JOIN urunler AS UR ON TR.PRODUCT_ID=UR.ID WHERE QUANTITY <> 0),
    
    IAD AS ( SELECT  PRODUCT_ID,UR.EXT_CODE AS KOD2, UR.NAME AS NAME2, 
    CASE WAREHOUSE_ID WHEN 3 THEN QUANTITY ELSE 0 END AS MERKEZ_STOK2 , 
    CASE WAREHOUSE_ID WHEN 1 THEN QUANTITY ELSE 0 END AS IADE_STOK2  
     FROM stoklar AS TR 
    INNER JOIN urunler AS UR ON TR.PRODUCT_ID=UR.ID WHERE QUANTITY <> 0)
    
    SELECT MRK.KOD1, MRK.NAME1,MRK.MERKEZ_STOK1	,IAD.IADE_STOK2 FROM MRK LEFT JOIN IAD ON MRK.KOD1=IAD.KOD2
    
    drop table stoklar
    drop table urunler

    Vay be bu arada hem tabloları yazabildim hem tabloların verisinden tablo çektim. :)

    • Düzenleyen TuranBozbek 28 Ekim 2015 Çarşamba 12:02
    28 Ekim 2015 Çarşamba 10:46
  • Sayın Natig Gurbanov hocam öncelikle ilginize teşekkürler.

    Id vermek sorunu çözmedi sanırım. Bir sonraki örneğinize göre uyarladım. Ancak sonuç değişmedi. 

    Ben şu şekilde yapmıştım. Burada değeri sıfır olmayan Merkez stokların hepsini listeliyorum ve yanınada iade stoklarını listeliyorum. Ancak Merkez stok sıfır olan ürünlerde iade var ise bu seferde onları listeleyemiyorum.

    WITH IAD AS (SELECT PRODUCT_ID, QUANTITY FROM PRODUCT_WAREHOUSE_STOCK AS TR 
    WHERE WAREHOUSE_ID=1  AND QUANTITY > 0) 
    
    
    SELECT TR.PRODUCT_ID,EXT_CODE,NAME,TR.QUANTITY, IA.QUANTITY,TR.TIME 
    FROM PRODUCT_WAREHOUSE_STOCK AS TR
    INNER JOIN PRODUCT AS PR ON  TR.PRODUCT_ID=PR.ID LEFT JOIN IAD AS IA ON IA.PRODUCT_ID=PR.ID 
    WHERE WAREHOUSE_ID=3  AND TR.QUANTITY > 0    ORDER BY EXT_CODE

    Sizin örneğinize uyarladığım da aşağıdaki gibi. Ama dediğim gibi sonuç alamadım. Sizin örneğinizle ilişkilendirdiğinizde Az çok kodlardan anlarsınız ne yapmak istediğimi. Sizin son örneğinizdeki sonucu bulmaya çalışıyorum. Ama olmuyor.

    WITH MRK AS (SELECT  PRODUCT_ID,UR.EXT_CODE AS KOD1, UR.NAME AS NAME1, 
    CASE WAREHOUSE_ID WHEN 3 THEN QUANTITY ELSE 0 END AS MERKEZ_STOK1 , 
    CASE WAREHOUSE_ID WHEN 1 THEN QUANTITY ELSE 0 END AS IADE_STOK1  
     FROM PRODUCT_WAREHOUSE_STOCK AS TR  
    INNER JOIN PRODUCT AS UR ON TR.PRODUCT_ID=UR.ID WHERE QUANTITY <> 0),
    
    IAD AS ( SELECT  PRODUCT_ID,UR.EXT_CODE AS KOD2, UR.NAME AS NAME2, 
    CASE WAREHOUSE_ID WHEN 3 THEN QUANTITY ELSE 0 END AS MERKEZ_STOK2 , 
    CASE WAREHOUSE_ID WHEN 1 THEN QUANTITY ELSE 0 END AS IADE_STOK2  
     FROM PRODUCT_WAREHOUSE_STOCK AS TR 
    INNER JOIN PRODUCT AS UR ON TR.PRODUCT_ID=UR.ID WHERE QUANTITY <> 0)
    
    SELECT MRK.KOD1, MRK.NAME1,MRK.MERKEZ_STOK1	,IAD.IADE_STOK2 FROM MRK LEFT JOIN IAD ON MRK.KOD1=IAD.KOD2


    Degerli kardesim ,bence siz sql in en zaif yerlerine daldiniz ,

    ben zaten yukarida yazdim

    case le bu tur sorularini cozmek isterseniz buyu sorunlarla karsilasirsiniz

    ortda cozulmuyecek bir sorun yok

    ben zaten model atdim size

    problem su 

    sum() istemiyorsunuz sadece rakamlar olmali

    1)with kullanarak tablonu parcaliyicaksin ---tabii ki sana lazim olan sartlarla(0 deger vermeyen)

    ve her yaratdigiin with table de join icin urun id olmali cunki tek sifir almayan deyer o senin tabloda

    2)urun id ye gore (ya da senin tabloda baska bir kolonla) tablolarini birlestiriceksin left join le

    ve ilave olarak sql2005 den bu yana bu turlu problemler icin Apply fonksiyonunu kullana bilirsin

    yok eger bas edemiyorsan 

    tablolarini   select top 5 le   5 satiriini kopyala suraya at hazir skripti gotur 

    cunki 

    bir millet iki devletiz 

     

    28 Ekim 2015 Çarşamba 20:59
  • Turan,

    Tablo yapilarin garip. Bu yapilar ile ve verdigin kirpilmis veri ile tahmin yuruterek cikardigim SQL, sana zaten en basta verdigim SQL:

    SELECT PRODUCT_ID, EXT_CODE, NAME,
           SUM(CASE
                   WHEN WAREHOUSE_ID = 3
                   THEN QUANTITY
                   ELSE 0
               END) AS MERKEZ_STOK,
           SUM(CASE
                   WHEN WAREHOUSE_ID = 1
                   THEN QUANTITY
                   ELSE 0
               END) AS IADE_STOK
    FROM stoklar AS TR
         INNER JOIN urunler AS UR ON TR.PRODUCT_ID = UR.ID
    WHERE QUANTITY > 0
    GROUP BY PRODUCT_ID, ext_code, name
    ORDER BY PRODUCT_ID;
    
    Sen bu tablolarda [TIME]'i kullanmamissin. Sana dedigim gibi o isi bozar, ondan mumkun degil demistim. 

    28 Ekim 2015 Çarşamba 22:08
  • Evet hocam şimdi istediğim sonuçları aldım.

    Daha öncekinde dediğiniz gibi galiba TIME kolonu karıştırıyordu.

    Biraz trafiği yağun oldu ama sonuçta çözüldü.

    Çok çok teşekkür ederim.

    29 Ekim 2015 Perşembe 07:32