Welcome to Sign in | Help
in Search

Group by ... (duplicate)

Last post 11-28-2007, 2:40 PM by B_gd_n[ ]Sahlean. 5 replies.
Sort Posts: Previous Next
  •  11-27-2007, 12:02 PM 3464

    Group by ... (duplicate)

    Buna ziua,

     Am o problema intr-un select mic ...

     select case when count(column1) =0 then 0 else sum(valoare) end as 'test'
    from table1
    where column3 = 0
    and data <= '2007-09-30'
    and column4 = 145214

    Numarul de linii pe coloana 1 este 0 si, in consecinta, rezultatul este:

    test

    0 

     

    Daca incerc acelasi select, dar grupat pe o alta coloana, nu mi se mai afiseaza nimic:

     

     select column4, case when count(column1) =0 then 0 else sum(valoare) end as 'test'
    from table1
    where column3 = 0
    and data <= '2007-09-30'
    and column4 = 145214

    group by column4

     

     
    Logic privind lucrurile ar trebui sa-mi afiseze

    column4          test                      

    145214              0

    In schimb nu-mi afiseaza nici un rezultat. E o problema de care m-am mai lovit si nu i-am gasit rezolvarea pana acum. 

    Daca poate sa-mi descreteasca cineva fruntea, as fi etern recunoscator.

     
    Va multumesc,

    V

     

    P.S. (l-am mai postat intr-un subforum, nu eram sigur unde era mai adecvat sa se afle) 

  •  11-27-2007, 12:12 PM 3465 in reply to 3464

    Re: Group by ... (duplicate)

    Încearcă: 

    SELECT ISNULL ( (SELECT SUM(valoare) AS test FROM table1 WHERE column3 = 0 AND data <= '2007-09-30' AND column4 = 145214 GROUP BY column4) , 0)


  •  11-27-2007, 12:23 PM 3466 in reply to 3465

    Re: Group by ... (duplicate)

    Trebuie sa-mi apara si coloana 4in rezultate (fac join dupa ea).
  •  11-27-2007, 2:44 PM 3471 in reply to 3464

    Re: Group by ... (duplicate)

    E normal să nu apară. De exemplu dacă încercăm următoarele query-uri, în Northwind:

    SELECT COUNT(*) as Nr FROM Employees WHERE FirstName='Nimeni'

     

    SELECT FirstName, COUNT(*) as Nr FROM Employees
    WHERE FirstName='Nimeni' GROUP BY FirstName

     

    La primul obţinem: 

    Nr
    -----------
    0
    (1 row(s) affected)

    Însă la al doilea nu obţinem nimic:

    FirstName  Nr
    ---------- -----------
    (0 row(s) affected)

    Ideea e că nu are cum să apară 'Nimeni' în coloana FirstName, dacă în coloana FirstName din tabelă nu apare niciodată 'Nimeni'. 

    Dacă dorim să obţinem:

    FirstName Nr
    --------- -----------
    Nimeni    0
    (1 row(s) affected)

    Atunci o soluţie ar fi:

    SELECT 'Nimeni' as FirstName, COUNT(*) as Nr FROM Employees
    WHERE FirstName='Nimeni'

     

    O altă soluţie, ceva mai complicată, care are avantajul că scriem 'Nimeni' o singură dată, ar fi: 

    SELECT FirstName, (
                SELECT COUNT(*) FROM Employees e WHERE e.FirstName=x.FirstName
    ) as Nr
    FROM (SELECT 'Nimeni' as FirstName) x

    Răzvan

  •  11-28-2007, 2:16 PM 3485 in reply to 3471

    Re: Group by ... (duplicate)

    rsocol:

    E normal să nu apară. De exemplu dacă încercăm următoarele query-uri, în Northwind:

    SELECT COUNT(*) as Nr FROM Employees WHERE FirstName='Nimeni'

     

    SELECT FirstName, COUNT(*) as Nr FROM Employees
    WHERE FirstName='Nimeni' GROUP BY FirstName

     

    La primul obţinem: 

    Nr
    -----------
    0
    (1 row(s) affected)

    Însă la al doilea nu obţinem nimic:

    FirstName  Nr
    ---------- -----------
    (0 row(s) affected)

    Ideea e că nu are cum să apară 'Nimeni' în coloana FirstName, dacă în coloana FirstName din tabelă nu apare niciodată 'Nimeni'. 

    Dacă dorim să obţinem:

    FirstName Nr
    --------- -----------
    Nimeni    0
    (1 row(s) affected)

    Atunci o soluţie ar fi:

    SELECT 'Nimeni' as FirstName, COUNT(*) as Nr FROM Employees
    WHERE FirstName='Nimeni'

     

    O altă soluţie, ceva mai complicată, care are avantajul că scriem 'Nimeni' o singură dată, ar fi: 

    SELECT FirstName, (
                SELECT COUNT(*) FROM Employees e WHERE e.FirstName=x.FirstName
    ) as Nr
    FROM (SELECT 'Nimeni' as FirstName) x

    Răzvan

     

    Cred ca am exemplificat problema destul de stangaci. Am o metoda pur proprie de a ma exprima :)

    Filtrul din exemplul meu si, "Nimeni" din al tau, nu era neaparat necesar (si nici nu era folosit), l-am pus doar ca sa exemplific cu un rezultat de 1 rand, respectiv 0, dupa cum ai facut-o si tu.

     Ca sa "pictez" mai bine problema, column4 este o coloana de id-uri ce inregistreaza anumite documente, care, la randul lor, in functie de anumite flag-uri au comportamente diferite.

     Acea coloana era si coloana pe care faceam join cu aceasta tabela si ma interesa sa-mi afiseze si id-urile ce nu contineau un anume flag (E destul de mult de explicat, tine de scadente, incasari, retururi, etc si nu are rost sa va plictisesc cu asta).

     Structura bazei este destul de complicata si era nevoie si de un al 3-lea self join ca sa functioneze corect.

     

    Dar, o sa va bucurati cu totii ca in final, am rescris interogarea, urmand alt sir logic si am ocolit totalmente aceasta problema.

     

    Va multumesc tuturor pt raspunsuri,
    V.

     

    P.S.: tot m-ar interesa daca exista vreo modalitate de a afisa ceea ce am exemplificat mai sus si in alta metoda decat cea expusa de Razvan.
    Group by all nu este o varianta :)


     

  •  11-28-2007, 2:40 PM 3486 in reply to 3485

    Re: Group by ... (duplicate)

    Daca vreti un raspuns rapid si la obiect precizati cât se poate de clar:

    [1] datele de intrare: tabele, vederi, etc.

    si

    [2] datele de ieşire 

View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems