konto usunięte

Temat: SQL porównanie pól rekordu z następnym rekordem

Witam was mam taki problem mam jedną tabelę z liczbami a,b,c,d,e,f chcę teraz sprawdzić czy są inne rekordy w bazie w tej samej tabeli które się powtarzają problem jest w tym że wartości a,b,c,d,e,f mogą być pomieszane tzn a wartość może być tam gdzie b , b wartość tam gdzie f. Więc chce sprawdzić czy wartość a pierwszego rekordu jest gdzieś w drugim rekordzie np jeśli nie bd w a w drugim rekordzie to porówna a do b w drugim rekordzie potem do c ,d e, f.

Napisałem takie małe zapytanie ale niestety to sam początek z dalszą częścią mam problem


SELECT Tabela1.[a], Tabela1.[b], Tabela1.[c], Tabela1.[d], Tabela1.[Identyfikator]
FROM Tabela1
WHERE Tabela1.[a] In (SELECT [a] FROM [Tabela1] GROUP BY [a] HAVING Count(*)>1 )
ORDER BY Tabela1.[a], Tabela1.[b], Tabela1.[c], Tabela1.[d];


To zapytanie wyświetla mi rekordy w których następny rekord też w a ma tą samą wartość, jak do tego dodać aby sprawdził też b,c,d,e,f w następnym rekordzie. Analogicznie do tego zrobiłem coś takiego :


SELECT Tabela1.[a], Tabela1.[b], Tabela1.[c], Tabela1.[d], Tabela1.[Identyfikator]
FROM Tabela1
WHERE Tabela1.[a] In (SELECT [a] FROM [Tabela1] GROUP BY [a] HAVING Count(*)>1 ) or Tabela1.[a] In (SELECT [b] FROM [Tabela1] GROUP BY [b] HAVING Count(*)>1 )
ORDER BY Tabela1.[a], Tabela1.[b], Tabela1.[c], Tabela1.[d];


Lecz nie chodzi stworzyłem dwa rekordy 1,2,3,4,5 oraz 2,1,3,4,5. Niestety po wysłaniu zapytania tabela jest pusta zaś gdy zmienię miejscami 2,1 w drugim rekordzie to zapytanie wyświetla mi te dwa rekordy. Gdzie jest problem przecież wstawiłem or więc jeśli w pierwszym polu nie będzie to żeby poszedł do drugiego pola czyli b. Proszę was o pomoc
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Temat: SQL porównanie pól rekordu z następnym rekordem

Nie wiem czy dobrze zrozumiałem problem, chcesz sprawdzić czy w tabeli występują duplikaty rekordów? Przy czym permutacje traktujemy jako duplikaty,
tzn. utożsamiamy rekordy (1,2,3) ~ (1,3,2) ~ (2,1,3) ~ (2,3,1) ~ (3,1,2) ~ (3,2,1) ?

Na szybko przychodzą mi do głowy 2 drogi:
1) zrobić funkcję, która będzie utożsamiała rekordy (np. posortuje wartości z obydwu wierszy wejściowych i porówna czy są jednakowe).
2) posortować dane w kolumnach przed dalszym przetwarzaniem. Nie analizowałem tej koncepcji i być może jest to ślepa uliczka :-) Jeśli struktura tabeli jest taka:
(ROW_ID, a,b,c,d,e,f), to możesz spróbować tak:


a. PIVOT danych - tzn. (ROW_ID, a,b,c,d,e,f) rozbijamy na wiele wierszy

ROW_ID, COL_VALUE
================

ROW_ID1, a
ROW_ID1, b
...
ROW_ID1, f
...

2. Sortujemy rezultat po ROW_ID, COL_VALUE i wzbogacamy (np. funkcją analityczną) o wskaźnik kolejności wartości w rekordzie ROW_ID<x>:

ROW_ID, COL_VALUE, ORDER_ID
===========================

ROW_ID1, A, 1
ROW_ID1, C, 2
ROW_ID1, D, 3
ROW_ID1, E, 4
ROW_ID1, B, 5
ROW_ID1, F, 6
....

3. UNPIVOT - na podstawie kolumny ORDER_ID przekształcamy zbiór z pkt. 2 do postaci:

ROW_ID1, A, C, D, E, B, F
...
ROW_IDn, X, Y, Z, V, W, U

gdzie dla wartości zachodzi:
A<=C<=D<=E<=B<=F



Powodzenia.

konto usunięte

Temat: SQL porównanie pól rekordu z następnym rekordem

A nie dało by się tutaj użyć sumy kontrolnej ? Tzn sprawdzać czy aktualny rekord ma taką samą sumę kontrolną jak następny ? Tylko jak coś takiego rozwiązać


SELECT * FROM dane as t1 WHERE CHECKSUM(t1.a, t1.b,t1.c,t1.d,t1.f) IN (SELECT CHECKSUM(t2.a, t2.b,t2.c,t2.d,t2.f) from dane as t2) "



Wyskakuje mi komunikat że funkcj CHECKSUM nie została zdefiniowana
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Temat: SQL porównanie pól rekordu z następnym rekordem

Pewnie można, tylko trzeba sobie ją napisać :-)

Co do rozwiązania drugiego, to w Oracle można by tak:


-- tabelka
create table pkw1 ( r number, a number, b number, c number,d number,e number,f number);

-- dane testowe
insert into pkw1
SELECT LEVEL,
mod(level,6),
mod(level+1,6),
mod(level+2,6),
mod(level+3,6),
mod(level+4,6),
mod(level,6)
FROM DUAL
CONNECT BY LEVEL <= 1000;

-- query: pivot, sort, unpivot

select min(r),count(0), a,b,c,d,e,f from (
SELECT r,
MAX (CASE WHEN order_id = 1 THEN v ELSE NULL END) a,
MAX (CASE WHEN order_id = 2 THEN v ELSE NULL END) b,
MAX (CASE WHEN order_id = 3 THEN v ELSE NULL END) c,
MAX (CASE WHEN order_id = 4 THEN v ELSE NULL END) d,
MAX (CASE WHEN order_id = 5 THEN v ELSE NULL END) e,
MAX (CASE WHEN order_id = 6 THEN v ELSE NULL END) f
FROM (WITH tmp
AS ( SELECT r, v
FROM (SELECT r, a v FROM pkw1
UNION ALL
SELECT r, b v FROM pkw1
UNION ALL
SELECT r, c v FROM pkw1
UNION ALL
SELECT r, d v FROM pkw1
UNION ALL
SELECT r, e v FROM pkw1
UNION ALL
SELECT r, f v FROM pkw1)
ORDER BY r, v)
SELECT t.r,
t.v,
ROW_NUMBER () OVER (PARTITION BY r ORDER BY v) order_id
FROM tmp t)
GROUP BY r
) group by a,b,c,d,e,f having count(0)>1;

konto usunięte

Temat: SQL porównanie pól rekordu z następnym rekordem

Czegoś łatwiejszego nie ma :D ? Powiedz mi nie da się tego sprawdzić w taki sposób jak to robiłem na początku ? Czyli sprawdzać pola aktualnego rekordu z polami następnego rekordu ? Sprawdza mi czy a in (SELECT b from dane ) or a in(SELECT A from dane ) itd.

konto usunięte

Temat: SQL porównanie pól rekordu z następnym rekordem

Aleks Tomczyk:
Czegoś łatwiejszego nie ma :D ?

Jak ma się idiotyczny model danych, to potem się cierpi.

Co to są za dane w ogóle?

Czy możesz przepisać te dane jakoś inaczej? Szymon G. edytował(a) ten post dnia 14.01.13 o godzinie 22:06
Marcin Miga

Marcin Miga Programista. Po
prostu programista.

Temat: SQL porównanie pól rekordu z następnym rekordem

Coś mi się wydaje, że to totolotek. Tak mi chyba na innym forum w oczy wskoczyło.
A jeśli tak, to można to inaczej rozwiązać...

pozdrawiaMM
Tomasz Anciński

Tomasz Anciński Programista Systemów
Sterowania,
Blumenbecker
Engineering...

Temat: SQL porównanie pól rekordu z następnym rekordem

nie wiem ale chyba prościej się nie da...

to są przykładowe dane... zmieniłem nazwy kolumn z abcdef na c1,c2... (mam problemy z literami jak jest więcej niż ijk...)

set nocount on;
use test;
if OBJECT_ID('dbo.Tabela1' , 'U') is not null
drop table dbo.Tabela1;

create table Tabela1 ( id int identity
,c1 int
,c2 int
,c3 int
,c4 int
,c5 int
,c6 int);

-- do tej pory chba zrozumiane...

declare @max as int, @rc as int, @nmax as int
set @max = 100;
set @rc = 1;
set @nmax = 100;

insert into dbo.Tabela1(c1,c2,c3,c4,c5,c6)
values(1,12,34,46,58,70)
while @rc + 1 <= @max
begin
insert into dbo.Tabela1(c1,c2,c3,c4,c5,c6)
select
Tabela1.c1 + RAND(@max)as c1 ,
Tabela1.c2 + RAND(@max)as c2 ,
Tabela1.c3 * RAND(@max)as c3 ,
Tabela1.c4 * RAND(@max)as c4 ,
Tabela1.c5 - RAND(@max)as c5 ,
Tabela1.c6 - RAND(@max)as c6 from dbo.Tabela1
where id =@rc;
set @rc=@rc+1
end

--to chyba też...

to jest gotowa sp_ którą trzeba wywołać podając w parametrze (@selectedRowID) id wybranego wiersza do porównania...

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Description: Poszukiwacz :)
-- =============================================
CREATE PROCEDURE sp_poszukiwacz
-- Add the parameters for the stored procedure here
@selectedRowID int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

select *
into #T_wybrany
from Tabela1 TT
where TT.id = @selectedRowID

select T.c1,T.c2,T.c3,T.c4,T.c5,T.c6
into #Wynik
from Tabela1 T inner join #T_wybrany TW on
T.c1 in (TW.c1,TW.c2,TW.c3,TW.c4,TW.c5,TW.c6) and
T.c2 in (TW.c1,TW.c2,TW.c3,TW.c4,TW.c5,TW.c6) and
T.c3 in (TW.c1,TW.c2,TW.c3,TW.c4,TW.c5,TW.c6) and
T.c4 in (TW.c1,TW.c2,TW.c3,TW.c4,TW.c5,TW.c6) and
T.c5 in (TW.c1,TW.c2,TW.c3,TW.c4,TW.c5,TW.c6) and
T.c6 in (TW.c1,TW.c2,TW.c3,TW.c4,TW.c5,TW.c6) and
TW.id = @selectedRowID

select *
from #T_wybrany

select *
from #Wynik
END
GO

Jeżeli nie będziesz wiedział o co chodzi to pisz...

a bym zapomniał w wyniku dostajesz dwie tabelki w jednej wybrany wiersz (wzorzec) a w drugiej wiersze zawierające liczby ze wzorca

właściwie to zamiast RAND() do generowania liczb losowych lepiej użyć takiej konstrukcji...
((abs(CHECKSUM(newid())+2147483649))/4294967296)*@nmax

tyle że możemy nie sprawdzić naszego kodu na 100 krotkach...Tomasz Anciński edytował(a) ten post dnia 15.01.13 o godzinie 07:27

konto usunięte

Temat: SQL porównanie pól rekordu z następnym rekordem

Zrezygnowałem z zapytania SQL zrobiłem już sprawdzanie na DATASET'cie po stronie programu. Ale dziękuje wszystkim za pomoc


For i = 0 To ds.Tables("zest").Rows.Count - 1
id = ds.Tables("zest").Rows(i).Item("ID")

For c = 0 To ds.Tables("zest").Rows.Count - 1
If ds.Tables("zest").Rows(c).Item("ID") <> id Then
If ((ds.Tables("zest").Rows(i).Item("a") Like ds.Tables("zest").Rows(c).Item("a") Or ds.Tables("zest").Rows(i).Item("a") Like ds.Tables("zest").Rows(c).Item("b") Or ds.Tables("zest").Rows(i).Item("a") Like ds.Tables("zest").Rows(c).Item("c") Or ds.Tables("zest").Rows(i).Item("a") Like ds.Tables("zest").Rows(c).Item("d") Or ds.Tables("zest").Rows(i).Item("a") Like ds.Tables("zest").Rows(c).Item("e") Or ds.Tables("zest").Rows(i).Item("a") Like ds.Tables("zest").Rows(c).Item("f")) And (ds.Tables("zest").Rows(i).Item("b") Like ds.Tables("zest").Rows(c).Item("a") Or ds.Tables("zest").Rows(i).Item("b") Like ds.Tables("zest").Rows(c).Item("b") Or ds.Tables("zest").Rows(i).Item("b") Like ds.Tables("zest").Rows(c).Item("c") Or ds.Tables("zest").Rows(i).Item("b") Like ds.Tables("zest").Rows(c).Item("d") Or ds.Tables("zest").Rows(i).Item("b") Like ds.Tables("zest").Rows(c).Item("e") Or ds.Tables("zest").Rows(i).Item("b") Like ds.Tables("zest").Rows(c).Item("f")) And (ds.Tables("zest").Rows(i).Item("c") Like ds.Tables("zest").Rows(c).Item("a") Or ds.Tables("zest").Rows(i).Item("c") Like ds.Tables("zest").Rows(c).Item("b") Or ds.Tables("zest").Rows(i).Item("c") Like ds.Tables("zest").Rows(c).Item("c") Or ds.Tables("zest").Rows(i).Item("c") Like ds.Tables("zest").Rows(c).Item("d") Or ds.Tables("zest").Rows(i).Item("c") Like ds.Tables("zest").Rows(c).Item("e") Or ds.Tables("zest").Rows(i).Item("c") Like ds.Tables("zest").Rows(c).Item("f")) And (ds.Tables("zest").Rows(i).Item("d") Like ds.Tables("zest").Rows(c).Item("a") Or ds.Tables("zest").Rows(i).Item("d") Like ds.Tables("zest").Rows(c).Item("b") Or ds.Tables("zest").Rows(i).Item("d") Like ds.Tables("zest").Rows(c).Item("c") Or ds.Tables("zest").Rows(i).Item("d") Like ds.Tables("zest").Rows(c).Item("d") Or ds.Tables("zest").Rows(i).Item("d") Like ds.Tables("zest").Rows(c).Item("e") Or ds.Tables("zest").Rows(i).Item("d") Like ds.Tables("zest").Rows(c).Item("f")) And (ds.Tables("zest").Rows(i).Item("e") Like ds.Tables("zest").Rows(c).Item("a") Or ds.Tables("zest").Rows(i).Item("e") Like ds.Tables("zest").Rows(c).Item("b") Or ds.Tables("zest").Rows(i).Item("e") Like ds.Tables("zest").Rows(c).Item("c") Or ds.Tables("zest").Rows(i).Item("e") Like ds.Tables("zest").Rows(c).Item("d") Or ds.Tables("zest").Rows(i).Item("e") Like ds.Tables("zest").Rows(c).Item("e") Or ds.Tables("zest").Rows(i).Item("e") Like ds.Tables("zest").Rows(c).Item("f")) And (ds.Tables("zest").Rows(i).Item("f") Like ds.Tables("zest").Rows(c).Item("a") Or ds.Tables("zest").Rows(i).Item("f") Like ds.Tables("zest").Rows(c).Item("b") Or ds.Tables("zest").Rows(i).Item("f") Like ds.Tables("zest").Rows(c).Item("c") Or ds.Tables("zest").Rows(i).Item("f") Like ds.Tables("zest").Rows(c).Item("d") Or ds.Tables("zest").Rows(i).Item("f") Like ds.Tables("zest").Rows(c).Item("e") Or ds.Tables("zest").Rows(i).Item("f") Like ds.Tables("zest").Rows(c).Item("f"))) Then

End If
End If
Next c
Next i

Aleks Tomczyk edytował(a) ten post dnia 15.01.13 o godzinie 08:16

konto usunięte

Temat: SQL porównanie pól rekordu z następnym rekordem

Aleks Tomczyk:
Zrezygnowałem z zapytania SQL zrobiłem już sprawdzanie na DATASET'cie po stronie programu. Ale dziękuje wszystkim za pomoc


[CUT]

To jest z lekka przerażające, ale ja tam się nie znam.

PS) taka wersja postgresowa:


-- tabela:

CREATE TABLE lotto (a int, b int, c int, d int, e int, f int);

-- Funkcja zwracająca posortowaną tablicę.
CREATE OR REPLACE FUNCTION array_sort (ANYARRAY)
RETURNS ANYARRAY LANGUAGE SQL
AS $$
SELECT ARRAY(
SELECT $1[s.i] AS foo
FROM
generate_series(array_lower($1,1), array_upper($1,1)) AS s(i)
ORDER BY foo
);
$$;

SELECT array_sort(ARRAY[a,b,c,d,e,f]) arr
FROM lotto
GROUP BY arr
HAVING count(*) > 1;

konto usunięte

Temat: SQL porównanie pól rekordu z następnym rekordem

Tomasz Anciński:

właściwie to zamiast RAND() do generowania liczb losowych lepiej użyć takiej konstrukcji...
((abs(CHECKSUM(newid())+2147483649))/4294967296)*@nmax

Dlaczego?
Tomasz Anciński

Tomasz Anciński Programista Systemów
Sterowania,
Blumenbecker
Engineering...

Temat: SQL porównanie pól rekordu z następnym rekordem

bo...

dla tej samej wartości ziarna RAND zawsze zwróci tą samą wartość...
np. po wywołaniu funkcji RAND() zawsze dostaniemy wynik 0.454560299686459
jeżeli wywołamy RAND(5) to zawsze dostaniemy wynik 0.713666525097956... czyli nie jest to żadna liczba losowa tylko jakaś operacja wykona na ziarnie,
natomiast funkcja CHECKSUM zwraca liczbę całkowitą z przedziału od -2147483648 do 2147483647, jeżeli podzielisz przez zakres czyli 4294967296 dostaniesz liczbę z zakresu od 0 do 1 z wyłączeniem 0 mnożysz później przez maksymalny zakres do wygenerowania liczby i już...

też byłem zaskoczony że rand nie zwraca liczby losowej...

ps.

bardzo to czytelne...

"For i = 0 To ds.Tables("zest").Rows.Count - 1
id = ds.Tables("zest").Rows(i).Item("ID")

For c = 0 To ds.Tables("zest").Rows.Count - 1
If ds.Tables("zest").Rows(c).Item("ID") <> id Then
If ((ds.Tables("zest").Rows(i).Item("a") Like ds.Tables("zest").Rows(c).Item("a") Or ds.Tables("zest").Rows(i).Item("a") Like ds.Tables("zest").Rows(c).Item("b") Or ds.Tables("zest").Rows(i).Item("a") Like ds.Tables("zest").Rows(c).Item("c") Or ds.Tables("zest").Rows(i).Item("a") Like ds.Tables("zest").Rows(c).Item("d") Or ds.Tables("zest").Rows(i).Item("a") Like ds.Tables("zest").Rows(c).Item("e") Or ds.Tables("zest").Rows(i).Item("a") Like ds.Tables("zest").Rows(c).Item("f")) And (ds.Tables("zest").Rows(i).Item("b") Like ds.Tables("zest").Rows(c).Item("a") Or ds.Tables("zest")...."Tomasz Anciński edytował(a) ten post dnia 15.01.13 o godzinie 09:03

konto usunięte

Temat: SQL porównanie pól rekordu z następnym rekordem

No cóż, ja tam zawsze inicjowałem generator czasem, więc miałem inną liczbę co wywołanie.

A jaki generator losowy jest użyty w newid() i która wersja UUIDa jest używana?

konto usunięte

Temat: SQL porównanie pól rekordu z następnym rekordem

Szymon Guz dla mnie przerażające wygląda to co wy piszecie :D. Więc wybrałem swoją stronę. Jakiegoś długiego czasu oczekiwania nie ma bez problemu radzi sobie z dużą ilością rekordów. Dziękuje wam za pomocAleks Tomczyk edytował(a) ten post dnia 15.01.13 o godzinie 09:12
Tomasz Anciński

Tomasz Anciński Programista Systemów
Sterowania,
Blumenbecker
Engineering...

Temat: SQL porównanie pól rekordu z następnym rekordem

Szymon G.:
No cóż, ja tam zawsze inicjowałem generator czasem, więc miałem inną liczbę co wywołanie.

A jaki generator losowy jest użyty w newid() i która wersja UUIDa jest używana?

wszystko domyślne, sqlexpress 2008
Tomasz Anciński

Tomasz Anciński Programista Systemów
Sterowania,
Blumenbecker
Engineering...

Temat: SQL porównanie pól rekordu z następnym rekordem

Aleks Tomczyk:
Szymon Guz dla mnie przerażające wygląda to co wy piszecie :D. Więc wybrałem swoją stronę. Jakiegoś długiego czasu oczekiwania nie ma bez problemu radzi sobie z dużą ilością rekordów. Dziękuje wam za pomoc

no już nie opowiadaj że nie rozumiesz tego co ci napisałem...

select * -- wybierasz wszystko co masz w Tabela1, wszystkie liczby do porównywania
into #T_wybrany -- wrzucamy je do tabeli pomocniczej z której wybieramy
from Tabela1 TT
where TT.id = @selectedRowID ---- interesującą nas krotkę do porównania

select T.c1,T.c2,T.c3,T.c4,T.c5,T.c6 --- wybieramy wartosci poszczególnych kolumn
into #Wynik --- i wrzucamy do tabeli z wynikami porównania
from Tabela1 T inner join #T_wybrany TW on ---- podpinamy naszą tabelę z wzorcem
T.c1 in (TW.c1,TW.c2,TW.c3,TW.c4,TW.c5,TW.c6) and --- porównujemy
T.c2 in (TW.c1,TW.c2,TW.c3,TW.c4,TW.c5,TW.c6) and
T.c3 in (TW.c1,TW.c2,TW.c3,TW.c4,TW.c5,TW.c6) and
T.c4 in (TW.c1,TW.c2,TW.c3,TW.c4,TW.c5,TW.c6) and
T.c5 in (TW.c1,TW.c2,TW.c3,TW.c4,TW.c5,TW.c6) and
T.c6 in (TW.c1,TW.c2,TW.c3,TW.c4,TW.c5,TW.c6) and
TW.id = @selectedRowID

select *
from #T_wybrany ---- wyświetlamy wzorzec

select *
from #Wynik --- wyświetlamy wyniki
where != @selectedRowID ---- usuwamy z wyników wzorzec...

tyle tylko że napisałem ci procedurę dla której parametrem ma być id wybranego wiersza do porównania...

nie ma w tym nic przerażającego :D

konto usunięte

Temat: SQL porównanie pól rekordu z następnym rekordem

Zacząłbym od znormalizowania rekordów. Być może tylko w widoku / pośrednim zapytaniu.

Czyli zamiast

ID Wartosc-1 Wartosc-2 Wartosc-3..Wartosc-n


zrobić


ID Seq Wartosc
---------------------
ID, 1, Wartosc-1
ID, 2, Wartosc-2
ID, 3, Wartosc-3..
ID, n, Wartosc-n


Przyda się do tego zapytanie / generator liczb od 1 do n.

A potem to już będzie prosto:

select Wartosc, count(*)
from widok
group by wartosc
having count(*)>1
Piotr L. edytował(a) ten post dnia 15.01.13 o godzinie 10:18
Marcin O.

Marcin O. Planning and
Manufacturing
Systems Specialist

Temat: SQL porównanie pól rekordu z następnym rekordem

Aleks Tomczyk:
Zrezygnowałem z zapytania SQL zrobiłem już sprawdzanie na DATASET'cie po stronie programu. Ale dziękuje wszystkim za pomoc


For i = 0 To ds.Tables("zest").Rows.Count - 1
id = ds.Tables("zest").Rows(i).Item("ID")

For c = 0 To ds.Tables("zest").Rows.Count - 1
If ds.Tables("zest").Rows(c).Item("ID") <> id Then
If ((ds.Tables("zest").Rows(i).Item("a") Like ds.Tables("zest").Rows(c).Item("a") Or ds.Tables("zest").Rows(i).Item("a") Like ds.Tables("zest").Rows(c).Item("b") Or ds.Tables("zest").Rows(i).Item("a") Like ds.Tables("zest").Rows(c).Item("c") Or ds.Tables("zest").Rows(i).Item("a") Like ds.Tables("zest").Rows(c).Item("d") Or ds.Tables("zest").Rows(i).Item("a") Like ds.Tables("zest").Rows(c).Item("e") Or ds.Tables("zest").Rows(i).Item("a") Like ds.Tables("zest").Rows(c).Item("f")) And (ds.Tables("zest").Rows(i).Item("b") Like ds.Tables("zest").Rows(c).Item("a") Or ds.Tables("zest").Rows(i).Item("b") Like ds.Tables("zest").Rows(c).Item("b") Or ds.Tables("zest").Rows(i).Item("b") Like ds.Tables("zest").Rows(c).Item("c") Or ds.Tables("zest").Rows(i).Item("b") Like ds.Tables("zest").Rows(c).Item("d") Or ds.Tables("zest").Rows(i).Item("b") Like ds.Tables("zest").Rows(c).Item("e") Or ds.Tables("zest").Rows(i).Item("b") Like ds.Tables("zest").Rows(c).Item("f")) And (ds.Tables("zest").Rows(i).Item("c") Like ds.Tables("zest").Rows(c).Item("a") Or ds.Tables("zest").Rows(i).Item("c") Like ds.Tables("zest").Rows(c).Item("b") Or ds.Tables("zest").Rows(i).Item("c") Like ds.Tables("zest").Rows(c).Item("c") Or ds.Tables("zest").Rows(i).Item("c") Like ds.Tables("zest").Rows(c).Item("d") Or ds.Tables("zest").Rows(i).Item("c") Like ds.Tables("zest").Rows(c).Item("e") Or ds.Tables("zest").Rows(i).Item("c") Like ds.Tables("zest").Rows(c).Item("f")) And (ds.Tables("zest").Rows(i).Item("d") Like ds.Tables("zest").Rows(c).Item("a") Or ds.Tables("zest").Rows(i).Item("d") Like ds.Tables("zest").Rows(c).Item("b") Or ds.Tables("zest").Rows(i).Item("d") Like ds.Tables("zest").Rows(c).Item("c") Or ds.Tables("zest").Rows(i).Item("d") Like ds.Tables("zest").Rows(c).Item("d") Or ds.Tables("zest").Rows(i).Item("d") Like ds.Tables("zest").Rows(c).Item("e") Or ds.Tables("zest").Rows(i).Item("d") Like ds.Tables("zest").Rows(c).Item("f")) And (ds.Tables("zest").Rows(i).Item("e") Like ds.Tables("zest").Rows(c).Item("a") Or ds.Tables("zest").Rows(i).Item("e") Like ds.Tables("zest").Rows(c).Item("b") Or ds.Tables("zest").Rows(i).Item("e") Like ds.Tables("zest").Rows(c).Item("c") Or ds.Tables("zest").Rows(i).Item("e") Like ds.Tables("zest").Rows(c).Item("d") Or ds.Tables("zest").Rows(i).Item("e") Like ds.Tables("zest").Rows(c).Item("e") Or ds.Tables("zest").Rows(i).Item("e") Like ds.Tables("zest").Rows(c).Item("f")) And (ds.Tables("zest").Rows(i).Item("f") Like ds.Tables("zest").Rows(c).Item("a") Or ds.Tables("zest").Rows(i).Item("f") Like ds.Tables("zest").Rows(c).Item("b") Or ds.Tables("zest").Rows(i).Item("f") Like ds.Tables("zest").Rows(c).Item("c") Or ds.Tables("zest").Rows(i).Item("f") Like ds.Tables("zest").Rows(c).Item("d") Or ds.Tables("zest").Rows(i).Item("f") Like ds.Tables("zest").Rows(c).Item("e") Or ds.Tables("zest").Rows(i).Item("f") Like ds.Tables("zest").Rows(c).Item("f"))) Then

End If
End If
Next c
Next i



ostre .... się módl żeby ci kolumn nie doszło .....Marcin Ochoński edytował(a) ten post dnia 21.01.13 o godzinie 10:07

konto usunięte

Temat: SQL porównanie pól rekordu z następnym rekordem

Nie nie to nie miało sensu zmieniłem na zapytanie które wykonuje się kilka sekund. Jednak ten sposób wymiękał przy 6 tyś rekordach.

konto usunięte

Temat: SQL porównanie pól rekordu z następnym rekordem

.Dariusz W. edytował(a) ten post dnia 28.01.13 o godzinie 22:41



Wyślij zaproszenie do