Twoje PC  
Zarejestruj się na Twoje PC
TwojePC.pl | PC | Komputery, nowe technologie, recenzje, testy
B O A R D
   » Board
 » Zadaj pytanie
 » Archiwum
 » Szukaj
 » Stylizacja

 
M E N U
  0
 » Nowości
0
 » Archiwum
0
 » Recenzje / Testy
0
 » Board
0
 » Rejestracja
0
0
 
Szukaj @ TwojePC
 

w Newsach i na Boardzie
 
OBECNI NA TPC
 
 » @GUTEK@ 05:27
 » alien1 05:19
 » piszczyk 04:17
 » Shark20 03:52
 » Martens 03:45
 » cVas 02:53
 » mo2 02:43
 » rzymo 02:25
 » mirek190 02:21
 » Visar 02:04
 » MARC 01:52
 » BoloX 01:09

 Dzisiaj przeczytano
 41118 postów,
 wczoraj 25974

 Szybkie ładowanie
 jest:
włączone.

 
ccc
TwojePC.pl © 2001 - 2024
A R C H I W A L N A   W I A D O M O Ś Ć
    

[Excell] Potrzebuję kwerendy wyszukującej/kasującej na podstawie cześci pola , Master/Pentium 18/10/06 21:59
Zadanie od znajomego. Jest sobie mini baza. Źle napisana ale działa :). Nie mam ochoty przepisywac jej od nowa (dużo roboty) szczególnie, że właściciel przyzwyczaił się do obecnej formy. A teraz pytanie: Mam pole typu nazwa gdzie nie mogą pojawić się wiersze z identycznymi TYLKO pierwszymi 5-6 znakami. Potrzebna jest mi kwerenda która te pola usunie lub przynajmniej pokaże. Office 2000. Mówiąc w skrócie: potrzebuję znaleść wiersze gdzie pierwsze 5-6 znaków jest identyczne. Pomocy - nie jestem dobry z tego :(.

Nie ma tego złego , co by się w gorsze
obrócić nie mogło - jak nie wierzysz
włącz komputer :-)

  1. Access nie Excell , Master/Pentium 18/10/06 22:00
    idę spać :)

    Nie ma tego złego , co by się w gorsze
    obrócić nie mogło - jak nie wierzysz
    włącz komputer :-)

  2. będę strzelał: , josh 19/10/06 00:03
    To może być coś w tym stylu, ale to tylko przypuszczenie :)

    kolumna - nazwa kolumny, ktora przechowuje znaki
    tabela - nazwa tabeli

    select t1.* from tabela t1 join tabela t2 on left(t1,6)=left(t2,6) and t1.kolumna <> t2.kolumna

    1. poprawka: , josh 19/10/06 00:03
      warunek mial byc oczywiscie taki:
      eft(t1.kolumna,6)=left(t2.kolumna,6) and t1.kolumna <> t2.kolumna

      Zobacz czy zadziała.

      1. jak wrócę z pracy to sprawdzę , Master/Pentium 19/10/06 07:59
        dzięki

        Nie ma tego złego , co by się w gorsze
        obrócić nie mogło - jak nie wierzysz
        włącz komputer :-)

  3. Przepraszam, że dopiero odpowiadam , Master/Pentium 21/10/06 20:43
    przez kilka dni nie mogłem zasiąść do tego projektu. Dzięki za odpowiedzi ale ja potrzebuję wyszukania tych duplikatów w jednej tabeli i w jednej kolumny. Z biegiem czasu pojawiły się tam duplikaty. Haczyk w tym, że duplikat ma identyczne kilka pierwszych znaków (kod) o potem idzie jego opis. Wiem, że w prawidłowej bazie danych kod i opis jest rozdzielone. Ta prawidłowa nie jest :), user się przyzwyczaił. Przymierzam się do rozdzielenia tego pola na dwa ale musiałbym przejrzeć i poprawić sporą cześć "aplikacji".

    Nie ma tego złego , co by się w gorsze
    obrócić nie mogło - jak nie wierzysz
    włącz komputer :-)

    1. a czy ja pisałem, , josh 23/10/06 10:37
      że tam są jakieś dwie tabele?

      1. nie działa , Master/Pentium 24/10/06 21:20
        błąd składniowy.
        Chyba będę musiał pouczyć się SQL'a :(

        Nie ma tego złego , co by się w gorsze
        obrócić nie mogło - jak nie wierzysz
        włącz komputer :-)

        1. w C++ napisałbym to w godzinę. , Master/Pentium 24/10/06 21:31
          Tutaj męczę się juz którys wieczór.

          Nie ma tego złego , co by się w gorsze
          obrócić nie mogło - jak nie wierzysz
          włącz komputer :-)

        2. może musi być , josh 25/10/06 00:28
          "...tabela AS t1 join tabela AS t2..."
          czyli w całości to by było:

          select t1.*
          from tabela as t1 join tabela as t2 on
          left(t1.kolumna,6)=left(t2.kolumna,6)
          and t1.kolumna <> t2.kolumna

          Zobacz też, czy Access posiada funkcję "left" - może nie ma takiej, tylko samo "substring", a może nie wspiera zapisu "<>" tylko "!=" - pokombinować trzeba, osobiście Accessa widziałem tylko raz 5 lat temu.

          Inna sprawa, że to, co napisałem, ogólnie jest mało sensowne :) ale wydaje mi się, że powinno działać, a jeśli nie to powinno przynajmniej zwracać złe wyniki, a nie od razu błąd składni.

    2. Spróbuj w ten sposób , Sherif 25/10/06 08:59
      Jeżeli chcesz wyszukać nazwy powtarzających się grup

      select left(nazwa, 5), count(*) from nazwatablicy
      group by left(nazwa, 5)
      having count(*) > 1;

      Jeżeli chcesz wyświetlić powtarzające się rekordy

      select * from nazwatablicy
      where left(nazwa, 5) = (
      select left(nazwa, 5) from nazwatablicy
      group by left(nazwa, 5)
      having count(*) > 1);

      Jeżeli chcesz usunąć wszystkie powtarzające się rekordy

      delete from nazwatablicy
      where left(nazwa, 5) = (
      select left(nazwa, 5) from nazwatablicy
      group by left(nazwa, 5)
      having count(*) > 1);

      W powyższych zapytaniach zamień "nazwatablicy", "nazwa", "5" odpowiednio na nazwę tablicy w tej bazie, nazwę pola ze zduplikowanymi wartościami i ilość początkowych znaków branych pod uwagę.

      1. hmm, , josh 25/10/06 09:57
        to taki Access posiada podzapytania SQL? Się nie spodziewałem.

      2. Poprawka , Sherif 25/10/06 10:07
        W drugim i trzecim zapytaniu zamiast "=" powinno być "in".

      3. dzięki , Master/Pentium 26/10/06 20:39
        Działa !!!. Mnie interesował wariant trzeci.

        Nie ma tego złego , co by się w gorsze
        obrócić nie mogło - jak nie wierzysz
        włącz komputer :-)

        1. a czy taki sposób nie spowodował , josh 28/10/06 15:07
          wywalenia wszystkich powtarzających się rekordów, nie pozostawiając ani jednego?

  4. miałem na myśli wariant drugi , Master/Pentium 28/10/06 16:35
    w skrócie policzyłem to wraz ze swoim pomysłem :), tamto zapytanie ładnie pokazuje duplikaty.

    Nie ma tego złego , co by się w gorsze
    obrócić nie mogło - jak nie wierzysz
    włącz komputer :-)

    
All rights reserved ® Copyright and Design 2001-2024, TwojePC.PL