Welcome to Sign in | Join | Help
in Search

ajutor cu un pivot

Last post 01-16-2012, 3:46 PM by B_gd_n[ ]Sahlean. 3 replies.
Sort Posts: Previous Next
  •  01-16-2012, 3:20 PM 9064

    ajutor cu un pivot

    Salut,

    Am o tabela de genu:
    ID phonenumber contact
    1 29349245934 a
    2 34953405823 a
    3 34538458345 a
    4 93459345394 b
    5 54688456854 b
    6 56786587856 c
    7 54684568456 c
    8 34858129349 c

    Vreau sa scriu un query care sa-mi returneze
    Contact PhoneNB1 PhoneNB2 PhoneNB3
    a 29349245934 34953405823 34538458345
    b 93459345394 54688456854
    c 54684568456 34858129349

    Ma puteti ajuta?am facut un while si cu pivot dar while dureaza enorm.

    Thx,
    Marius
  •  01-16-2012, 3:31 PM 9065 in reply to 9064

    Re: ajutor cu un pivot

    Ai incercat
    http://msdn.microsoft.com/en-us/library/ms177410.aspx ?
  •  01-16-2012, 3:35 PM 9066 in reply to 9065

    Re: ajutor cu un pivot

    da...pai cu pivot tb sa-l fac. problema este ca nu am dupa ce sa fac pivot. imi mai trebuie o coloana care sa-mi numere numerele de telefon per contact.

    sa fie de genul

    id nrtel contact countnrtel
    1 34858 a nrtel1
    2 834583 a nrtel2
    3 34858 b nrtel1
    .
    .
    ..

    am reusit sa-mi adaug aceasta coloana cu ajutorul unui while in alt while (dar ruleaza foarte greu) as vrea o alta ideea...sa fie mai rapid
  •  01-16-2012, 3:46 PM 9067 in reply to 9066

    Re: ajutor cu un pivot

    morikoth:
    ... imi mai trebuie o coloana care sa-mi numere numerele de telefon per contact ...

    1) Pentru asta poţi să foloseşti ROW_NUMBER

    2) O soluţie pentru cazul în care numărul de telefoane per contact este finit (şi redus):

    DECLARE @Source TABLE
    (
      ID      INT PRIMARY KEY,
      PhoneNumber VARCHAR(10) NOT NULL,
      Contact    VARCHAR(10) NOT NULL,
      UNIQUE(Contact, PhoneNumber)
    );

    INSERT  @Source (ID, PhoneNumber, Contact)
    SELECT 1,'29349245934','a' UNION ALL
    SELECT 2,'34953405823','a' UNION ALL
    SELECT 3,'34538458345','a' UNION ALL
    SELECT 4,'93459345394','b' UNION ALL
    SELECT 5,'54688456854','b' UNION ALL
    SELECT 6,'56786587856','c' UNION ALL
    SELECT 7,'54684568456','c' UNION ALL
    SELECT 8,'34858129349','c';

    WITH Base
    AS
    (
    SELECT  a.Contact,
        a.PhoneNumber,
        ROW_NUMBER() OVER(PARTITION BY a.Contact ORDER BY a.PhoneNumber) RowNum
    FROM  @Source a
    )
    SELECT    pvt.Contact,
            pvt.[1] AS PhoneNum1,
            pvt.[2] AS PhoneNum2,
            pvt.[3] AS PhoneNum3

    FROM  Base b
    PIVOT  ( MAX(b.PhoneNumber) FOR b.RowNum IN ([1], [2], [3]) ) pvt


    Restricţia UNIQUE(Contact, PhoneNumber)
    1) ne obligă să memorăm pentru fiecare contact un nr. de telefon o singură dată şi
    2) indexul unic folosit pentru implementarea acestei restricţii de unicitate este util pentru procesarea funcţiei ROW_NUMBER.
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems