1

Konu: SQL Group By

selamlar;

Visual Fox Pro
Select  * from ted_teklif  group by id


şeklide yapınca çalışıyor.

SQL
SELECT  * FROM ted_teklif WITH (NOLOCK) 

GROUP BY id,projekod, firmakodu, otomotiv, sop, projesure, gonderen, tarih, teklifno, gteklifno, aciklama, termin, durum, wka_partno, stokadi, yillik_iht, son_kullan, resimiste, moq,
ppq, leadtime, spoint, fiyat, validate, doviz, teslimat, deadline, rn, malzemeid,  hsid, acan, actar, duzelten, duzelttar, kalipiste, fiyatiste, gtekliftar, guid, sirano


SQL de guruplamayı sadece id ye göre nasıl yapabilirim. Tüm alanlarada ihtiyacım var tabiki.

SQL
SELECT  id FROM ted_teklif WITH (NOLOCK) GROUP BY id


bu işimi görmüyor.

Bilmediğin Neyse Yanıldığındır.

2

Re: SQL Group By

id bu tablonun primary key ise:

select * from ted_teklif

yoksa zaten ne mantikla gruplanacagi mechul.

3

Re: SQL Group By

benim sorum; sql server da gurup by dan sonra alan adlarının hepsini yazmadan bir çözüm varmı?

Bilmediğin Neyse Yanıldığındır.

4

Re: SQL Group By

SQL
SELECT DISTINCT * FROM ted_teklif WITH (NOLOCK)

5

Re: SQL Group By

Eger alan adlarinin 'hepsi' gerekiyorsa Cemal'in dedigi gibi Distinct yoksa yok.

6 Son düzenleyen, mrduyar (19.02.2009 09:40:37)

Re: SQL Group By

selamlar,

SQL
USE TIGER

SELECT t3.urun,t3.BOMREVREF,sum(t3.TOPLAM) AS TOPLAM FROM
(
SELECT *,t2.ort_fiyat*T1.AMOUNT AS TOPLAM FROM
(
SELECT Lg_099_bomline.LINETYPE, Lg_099_items.CODE AS STOKADi ,Lg_099_items.NAME, Lg_099_items.SPECODE, Lg_099_unitsetl.CODE,
    Lg_099_bomline.AMOUNT, Lg_099_bomline.BOMREVREF, Lg_099_bomaster.CAPIBLOCK_MODIFIEDDATE,
    Lg_099_items.LOGICALREF, LG_099_BOMASTER.code AS urun,Lg_xt1001_099.*
FROM dbo.LG_099_BOMLINE Lg_099_bomline 
    LEFT OUTER JOIN dbo.LG_099_ITEMS Lg_099_items
    ON Lg_099_bomline.ITEMREF = Lg_099_items.LOGICALREF
LEFT OUTER JOIN dbo.LG_XT1001_099 Lg_xt1001_099
    ON Lg_099_bomline.ITEMREF = Lg_xt1001_099.PARLOGREF
    LEFT OUTER JOIN dbo.LG_099_BOMASTER Lg_099_bomaster
   ON  Lg_099_bomline.BOMREVREF = Lg_099_bomaster.VALIDREVREF
    LEFT OUTER JOIN dbo.LG_099_UNITSETL Lg_099_unitsetl
   ON  Lg_099_bomline.UOMREF = Lg_099_unitsetl.LOGICALREF
WHERE  LEN(Lg_099_bomaster.CODE)>0 AND Lg_099_bomline.LINETYPE=0
 
) t1
LEFT OUTER JOIN
(
SELECT Lg_099_12_gntotst.STOCKREF,Lg_099_12_gntotst.AVGVALUE AS ort_fiyat
FROM  dbo.LG_099_12_gntotst
WHERE    Lg_099_12_gntotst.INVENNO = ( 0 )
) t2
ON t1.LOGICALREF=t2.STOCKREF
) t3
GROUP BY t3.BOMREVREF,t3.urun
ORDER BY t3.BOMREVREF

yukarıdaki kod doğru ve sorunsuz çalışmaktadır (bence)
Sorum şu: sonuç 3 kolon olarak çıkıyor. urun,BOMREVREF ve TOPLAM ben ise (Lg_099_bomline.LINETYPE, Lg_099_items.CODE AS STOKADi ,Lg_099_items.NAME, Lg_099_items.SPECODE, Lg_099_unitsetl.CODE,
    Lg_099_bomline.AMOUNT, Lg_099_bomline.BOMREVREF, Lg_099_bomaster.CAPIBLOCK_MODIFIEDDATE,
    Lg_099_items.LOGICALREF, LG_099_BOMASTER.code as urun,Lg_xt1001_099.*) bunlardan bir veya birkaçını 4,5,6.. kolon olarak koymak isitiyorum ama 4,5,6... kolonları guruplamak istemiyorum. Nasıl yapabilirim. VFP dakigibi yani.

Umarım anlatabilmişimdir.

Ek Olarak.
Sonuç hata veriyor anlamı nedir!
Warning: Null value is eliminated by an aggregate or other SET operation.
(2501 row(s) affected)

Bilmediğin Neyse Yanıldığındır.

7

Re: SQL Group By

Foxdaki gibi (daha doğrusu fox8 öncesi gibi) group by sql serverda mümkün değil.

8

Re: SQL Group By

tamam VFP gibi değil. ama bir cevap olması gerekiyor.

Bilmediğin Neyse Yanıldığındır.

9

Re: SQL Group By

vfp'deki hataya yol açabiliyor. o yüzden sql server da buna izin verilmemiş. vfp bu durumda group by kullanılmayan alanların sadece birini alıyor. tabii ki group by kod deyip adını da alınca aslında problem olmaz ama o bunu bilemiyor.

o bahsettiğin hata da null değerle ilgili. bir veriye null değer girmişsin ve şartlarda kullanmışsın galiba. null değer girme. girersen de is not null gibi kontrol et.

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

10 Son düzenleyen, ctapan (19.02.2009 11:34:02)

Re: SQL Group By

mrduyar yazdı:

tamam VFP gibi değil. ama bir cevap olması gerekiyor.


tam olarak aynı şey değil ama belki işini görür

SQL
USE TIGER

SELECT t3.urun,t3.BOMREVREF,sum(t3.TOPLAM) AS TOPLAM
 
,(SELECT top 1 t3.Code FROM t3) AS code FROM
 
(
SELECT *,t2.ort_fiyat*T1.AMOUNT AS TOPLAM FROM
(
SELECT Lg_099_bomline.LINETYPE, Lg_099_items.CODE AS STOKADi ,Lg_099_items.NAME, Lg_099_items.SPECODE, Lg_099_unitsetl.CODE,
  Lg_099_bomline.AMOUNT, Lg_099_bomline.BOMREVREF, Lg_099_bomaster.CAPIBLOCK_MODIFIEDDATE,
    Lg_099_items.LOGICALREF, LG_099_BOMASTER.code AS urun,Lg_xt1001_099.*
FROM dbo.LG_099_BOMLINE Lg_099_bomline 
  LEFT OUTER JOIN dbo.LG_099_ITEMS Lg_099_items
    ON Lg_099_bomline.ITEMREF = Lg_099_items.LOGICALREF
LEFT OUTER JOIN dbo.LG_XT1001_099 Lg_xt1001_099
  ON Lg_099_bomline.ITEMREF = Lg_xt1001_099.PARLOGREF
    LEFT OUTER JOIN dbo.LG_099_BOMASTER Lg_099_bomaster
   ON  Lg_099_bomline.BOMREVREF = Lg_099_bomaster.VALIDREVREF
    LEFT OUTER JOIN dbo.LG_099_UNITSETL Lg_099_unitsetl
   ON  Lg_099_bomline.UOMREF = Lg_099_unitsetl.LOGICALREF
WHERE  LEN(Lg_099_bomaster.CODE)>0 AND Lg_099_bomline.LINETYPE=0
 
) t1
LEFT OUTER JOIN
(
SELECT Lg_099_12_gntotst.STOCKREF,Lg_099_12_gntotst.AVGVALUE AS ort_fiyat
FROM  dbo.LG_099_12_gntotst
WHERE    Lg_099_12_gntotst.INVENNO = ( 0 )
) t2
ON t1.LOGICALREF=t2.STOCKREF
) t3
GROUP BY t3.BOMREVREF,t3.urun
ORDER BY t3.BOMREVREF

11 Son düzenleyen, mrduyar (19.02.2009 13:09:51)

Re: SQL Group By

SQL
USE TIGER

SELECT * FROM
(
    SELECT t3.urun,t3.BOMREVREF,sum(t3.TOPLAM) AS TOPLAM  FROM
    (
    SELECT *,t2.ort_fiyat*T1.AMOUNT AS TOPLAM FROM
    (
    SELECT Lg_099_bomline.LINETYPE, Lg_099_items.CODE AS STOKADi ,Lg_099_items.NAME, Lg_099_items.SPECODE, Lg_099_unitsetl.CODE,
        Lg_099_bomline.AMOUNT, Lg_099_bomline.BOMREVREF, Lg_099_bomaster.CAPIBLOCK_MODIFIEDDATE,
        Lg_099_items.LOGICALREF, LG_099_BOMASTER.code AS urun,Lg_xt1001_099.*
     FROM dbo.LG_099_BOMLINE Lg_099_bomline 
        LEFT OUTER JOIN dbo.LG_099_ITEMS Lg_099_items
        ON Lg_099_bomline.ITEMREF = Lg_099_items.LOGICALREF
    LEFT OUTER JOIN dbo.LG_XT1001_099 Lg_xt1001_099
        ON Lg_099_bomline.ITEMREF = Lg_xt1001_099.PARLOGREF
        LEFT OUTER JOIN dbo.LG_099_BOMASTER Lg_099_bomaster
       ON  Lg_099_bomline.BOMREVREF = Lg_099_bomaster.VALIDREVREF
        LEFT OUTER JOIN dbo.LG_099_UNITSETL Lg_099_unitsetl
       ON  Lg_099_bomline.UOMREF = Lg_099_unitsetl.LOGICALREF
    WHERE  LEN(Lg_099_bomaster.CODE)>0 AND Lg_099_bomline.LINETYPE=0
 
    ) t1
    LEFT OUTER JOIN
    (
    SELECT Lg_099_12_gntotst.STOCKREF,Lg_099_12_gntotst.AVGVALUE AS ort_fiyat
    FROM  dbo.LG_099_12_gntotst
     WHERE    Lg_099_12_gntotst.INVENNO = ( 0 )
    ) t2
    ON t1.LOGICALREF=t2.STOCKREF
    ) t3
    GROUP BY t3.BOMREVREF,t3.urun
) t4
LEFT OUTER JOIN (
    SELECT Lg_099_bomline.LINETYPE, Lg_099_items.CODE AS STOKADi ,Lg_099_items.NAME, Lg_099_items.SPECODE, Lg_099_unitsetl.CODE,
        Lg_099_bomline.AMOUNT, Lg_099_bomline.BOMREVREF, Lg_099_bomaster.CAPIBLOCK_MODIFIEDDATE,
        Lg_099_items.LOGICALREF, LG_099_BOMASTER.code AS urun,Lg_xt1001_099.*
     FROM dbo.LG_099_BOMLINE Lg_099_bomline 
        LEFT OUTER JOIN dbo.LG_099_ITEMS Lg_099_items
        ON Lg_099_bomline.ITEMREF = Lg_099_items.LOGICALREF
    LEFT OUTER JOIN dbo.LG_XT1001_099 Lg_xt1001_099
        ON Lg_099_bomline.ITEMREF = Lg_xt1001_099.PARLOGREF
        LEFT OUTER JOIN dbo.LG_099_BOMASTER Lg_099_bomaster
       ON  Lg_099_bomline.BOMREVREF = Lg_099_bomaster.VALIDREVREF
        LEFT OUTER JOIN dbo.LG_099_UNITSETL Lg_099_unitsetl
       ON  Lg_099_bomline.UOMREF = Lg_099_unitsetl.LOGICALREF
    WHERE  LEN(Lg_099_bomaster.CODE)>0 AND Lg_099_bomline.LINETYPE=0
    ) t5
ON t5.urun=t4.urun

selamlar; çözüm sanırım bu şekilde olmalı.
ancak Lg_099_bomline (55642 row(s) affected) satır olduğu için midir nedir.
sonuç (55642 row(s) affected) adet çıkıyor.
Bana (2501 row(s) affected) satır gerekli.

Bilmediğin Neyse Yanıldığındır.

12

Re: SQL Group By

SQL
)... t4 

LEFT OUTER JOIN (
    SELECT Lg_099_items.CODE AS STOKADi1 ,
Lg_099_items.NAME,
Lg_099_items.SPECODE,
Lg_099_items.LOGICALREF,Lg_xt1001_099.* FROM dbo.LG_099_ITEMS Lg_099_items
LEFT OUTER JOIN dbo.LG_XT1001_099 Lg_xt1001_099
        ON Lg_099_items.LOGICALREF = Lg_xt1001_099.PARLOGREF
    ) t5
ON t5.STOKADi1=t4.urun

çözüm ü bunda buldum.

Bilmediğin Neyse Yanıldığındır.

13

Re: SQL Group By

FULL/LEFT/RIGHT JOIN kullanıldığında relation kurulan tabloda ilgili kayıt bulunamıyorsa, join'in getiremediği satırlara NULL değeri atanır.

14

Re: SQL Group By

çok teş. sorunları çözüldü. ama query i kısaltmak için çözüm arayışlarım devam etmekte.

Bilmediğin Neyse Yanıldığındır.