Welcome to Sign in | Help

Re: o problema de update

  •  02-19-2008, 4:11 PM

    Re: o problema de update

    am revenit..

    in primul rand trebuie neaparat mentionez ca m-a luat cu dureri de cap incercand sa inteleg ce am sris eu in descrierea problemei asa ca mltumesc nespus celor care au rezistat tentatiei de a trece mai departe si au incercat sa ma ajute;

    in al doilea rand am reusit sa gasec inca un raspuns la problema mea si am decis sa il postez aici (fara prea multe explicatii pt ca nu ma pricep la alea)

    asta ar fi tabelul de test:

    CREATE TABLE [dbo].[Table_1](
        [id] [int] IDENTITY(1,1) NOT NULL,
        [sub_id] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
     CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED
    (
        [id] ASC
    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]

    ------------------------------------------------------------------------------------------------------------------------
    acestea sunt datele de plecare (daca poate sa imi spuna cineva cum sa scriptez continutul unui tabel ar fi super) - dar se vede mai bine ce e nevoie in rezultate

    1a
    2a
    3ab
    4b
    5cdf
    6dfds
    7ddd
    8cdf
    9adf
    10dfds
    11bb
    12cc
    13ddd
    14ddd
    NULLNULL

    ------------------------------------------------------------------------------------------------------------------------
    acestea sunt rezultatele:

    1a1
    2a2
    3ab1
    9adf1
    4b1
    11bb1
    12cc1
    5cdf1
    8cdf2
    7ddd1
    13ddd2
    14ddd3
    6dfds1
    10dfds2
    NULLNULLNULL

    se poate observa ca am daugat o noua coloana care itroduce un fel de sub_id care incepe de la 1 in cazul fiecarui grup de inregistrari duplicate si incrementeaza pana la sfarsitul grupului.

    eu aveam nevoie de un query care sa imi genereze datele de pe acea coloana folosind ce se gasea in primele 2 coloane (prima era un id unic pe tabel)

    bineinteles ca aceasta este o reprezentare mult simplificata a problemei mele (inca o data imi cer scuze ca nu am dat un exemplu atat de clar de la inceput) si cred ca este irelevant motivul pt care ar vrea cineva sa faca ce am prezentat mai sus

    iar o rezolvare destul de interesanta la care am ajuns de curand cu mult ajutor din partea unui prieten ar fi urmatoarea:


    SELECT     id, SUBSTRING(sub_id, 1, 10) AS init, SUBSTRING(CAST
                              ((SELECT     COUNT(sub_id) + 1 AS Expr1
                                  FROM         Table_1 AS t2
                                  WHERE     (Table_1.id > id) AND (Table_1.sub_id = sub_id)) AS nvarchar(10)) + sub_id, 1, 1) AS result
    FROM         Table_1
    ORDER BY init, result


    daca poate sa imi spuna cineva care solutie este mai performanta (aceasta care foloseste COUNT sau cea in care se foloseste un cursor) m-ar scuti de testele care ar merita facute. Smile
    sau macar sa imi dati cateva linii care ar trebui urmarite pt un astfel de test, thx.
View Complete Thread
Powered by Community Server (Commercial Edition), by Telligent Systems