Welcome to Sign in | Help
in Search

problema sql - union cred ...

Last post 12-04-2009, 10:23 PM by Diana. 6 replies.
Sort Posts: Previous Next
  •  12-04-2009, 1:38 PM 7887

    problema sql - union cred ...

    Buna,
    Chiar nu reusesc sa rezolv problema urmatoare - am un blocaj, desi pare sa fie simpla :

    Am situatia vinzarilor si a blocarilor pe saptamina(S), luna (L), An(A) per client(C) :
    Vinzari
    C1 S1 L1 A1 100 ( adica clientul 1 pe saptamina 1 , luna 1 , anul 1 a avut 100 de bucati cumparate)
    C1 S2 L1 A1 200
    C2 S1 L1 A1 50

    Blocari
    C1 S1 L1 A1 3( adica clientul 1 pe saptamina 1 , luna 1 , anul 1 a avut 3 zile blocate)
    C2 S3 L1 A1 2


    Se cere ca sa se dea situatia pe client si saptamina , luna, an :

    C1 S1 L1 A1 100 3 ( adica clientul 1 pe saptamina 1 , luna 1 , anul 1 a avut 100 de bucati cumparate si 3 zile blocate)
    C1 S2 L1 A1 200 0( adica clientul 1 pe saptamina 2 , luna 1 , anul 1 a avut 200 de bucati cumparate si 0 zile blocate)
    C2 S1 L1 A1 50   0( adica clientul 2 pe saptamina 1 , luna 1 , anul 1 a avut 50 de bucati cumparate si 0 zile blocate)
    C2 S3 L1 A1  0    2( adica clientul 2 pe saptamina 1 , luna 1 , anul 1 a avut 0de bucati cumparate si 2 zile blocate)

    Please help!

    Ignat Andrei
    http://serviciipeweb.ro/iafblog
  •  12-04-2009, 2:40 PM 7888 in reply to 7887

    Re: problema sql - union cred ...

    Cam "buruienos", nu-mi place (mai ales UNION):

    SELECT
    s.Customer,
    s.[Week], s.[Month], s.[year], s.Sales, CASE WHEN b.blocked IS NULL THEN 0 ELSE b.blocked END AS blocked
    FROM Sales s
    LEFT OUTER JOIN Blocking b ON
    s.Customer = b.Customer
    AND
    s.Week = b.Week
    AND
    s.[Month] = b.[Month]
    AND
    s.[year] = b.[year]
    UNION
    SELECT
    b.Customer,
    b.[Week], b.[Month], b.[year], CASE WHEN s.Sales IS NULL THEN 0 ELSE s.Sales END AS Sales, b.Blocked
    FROM Blocking b LEFT OUTER JOIN Sales s ON
    b.Customer = s.Customer
    AND
    b.Week = s.Week
    AND
    b.[Month] = s.[Month]
    AND
    b.[year] = s.[year]

    Nu am mai lucrat de mult cu reporting services, nu stiu ce mai poate face. Poate faimosul "tablix" (?????).
  •  12-04-2009, 4:50 PM 7889 in reply to 7887

    Re: problema sql - union cred ...

    Eu nu m-as fi chinuit ca Diana sa potrivesc din vorbe fraza sql; as face un view cu instrumentul vizual, jucandu-ma cu sagetile alea prin care potrivesti left join si right join, la campuri as fi pus in loc de null un 0 .

    Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
  •  12-04-2009, 5:02 PM 7890 in reply to 7888

    Re: problema sql - union cred ...

    multumesc mult Diana!
    Cred ca din cauza copacilor nu vedeam padurea -  am la with -uri inauntru... Undeva fac o greseala , pentru ca , in sql-ul meu particular( care se reduce pina la urma la ce am scris)inca nu merge...
    Inca o data, multumesc!


    Ignat Andrei
    http://serviciipeweb.ro/iafblog
  •  12-04-2009, 6:37 PM 7891 in reply to 7890

    Re: problema sql - union cred ...

    Andrei, you're welcome...:)
    Vezi si ce balarii ti-am bagat in "execution plan"...UNION baga un pas suplimentar de "sort" care poate fi destul de costisitor.

    Gigi - ce sa-i faci, tabieturi de om batran...:)
  •  12-04-2009, 7:44 PM 7892 in reply to 7891

    Re: problema sql - union cred ...


    DECLARE @Vanzari TABLE (C INT, S INT, A INT, L INT, Valoare INT)
    INSERT INTO @Vanzari
    VALUES (1,1,1,1,100), (1,2,1,1,200), (2,1,1,1,50)

    DECLARE @Blocari TABLE (C INT, S INT, A INT, L INT, Valoare INT)
    INSERT INTO @Blocari
    VALUES (1,1,1,1,3), (2,3,1,1,2)

    SELECT * FROM @Vanzari
    SELECT * FROM @Blocari

    SELECT COALESCE(V.C, B.C) AS C,
      COALESCE(V.S, B.S) AS S,
      COALESCE(V.A, B.A) AS A,
      COALESCE(V.L, B.L) AS L,
      COALESCE(V.Valoare,0) AS ValoareV,
      COALESCE(B.Valoare,0) AS ValoareB
    FROM @Vanzari AS V
      FULL OUTER JOIN @Blocari AS B ON V.C = B.C
                    AND V.S = B.S
                    AND V.A = B.A
                    AND V.L = B.L   
     
  •  12-04-2009, 10:23 PM 7893 in reply to 7892

    Re: problema sql - union cred ...

    E mai performanta varianta lui Bogdan - compara planurile de executie.
    Multumiri...:)
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems