Sužinokite, kurios eilutės turi skirtingas vertes tam tikrame stulpelyje Teradata SQL

Bandau palyginti du adresus iš vieno ID, kad pamatytumėte, ar jie atitinka. Pavyzdžiui:

 Id Adress Code Address 1 1 123 Main 1 2 123 Main 2 1 456 Wall 2 2 456 Wall 3 1 789 Right 3 2 100 Left 

Aš tiesiog bandau išsiaiškinti, ar adresas atitinka kiekvieną ID. Todėl šiuo atveju noriu grąžinti tik ID 3, turintį kitą adresą adreso 1 ir 2 adresams.

21
04 дек. Hatt rinkinys 04 Dec 2012-12-04 20:07 '12 - 20:07 2012-12-04 20:07
@ 4 atsakymai

Prisijunkite prie stalo su jumis ir duokite jai du skirtingus slapyvardžius ( A ir B sekančiame pavyzdyje). Tai leidžia jums palyginti skirtingas tos pačios lentelės eilutes.

 SELECT DISTINCT A.Id FROM Address A INNER JOIN Address B ON A.Id = B.Id AND A.[Adress Code] < B.[Adress Code] WHERE A.Address <> B.Address 

„Mažesnis“ palyginimas < užtikrina, kad gausite 2 skirtingus adresus, ir du kartus negaunate tų pačių 2 adresų kodų. Vietoj „ne lygus“ <> , kodai atitiks (1, 2) ir (2, 1); kiekvienas iš jų yra A ir B slapyvardžiai.

Prisijungimo sąlyga yra atsakinga už styginių atitikimą, kai papildomos sąlygos yra patikrintos kur-išlyga.


UPDATE :

Aukščiau pateiktas užklausa veikia su bet kuriais adresų kodais. Jei norite palyginti adresus su konkrečiais adresų kodais, galite pakeisti užklausą į

 SELECT A.Id FROM Address A INNER JOIN Address B ON A.Id = B.Id WHERE A.[Adress Code] = 1 AND B.[Adress Code] = 2 AND A.Address <> B.Address 

Manau, kad būtų naudinga surasti klientus, turinčius sąskaitos išrašymo adresą (pvz., Adreso kodą = 1), kuris skiriasi nuo pristatymo adreso (adreso kodas = 2).

29
04 дек. Atsakymą pateikė Olivier Jacot-Descombes gruodžio 4 d. 2012-12-04 20:15 '12 8:15 pm 2012-12-04 20:15

Tai veikia PL / SQL:

 select count(*), id,address from table group by id,address having count(*)<2 
4
04 дек. atsakymas, kurį pateikė Yasin Okumuş 04 dec. 2012-12-04 20:18 '12 8:18 pm 2012-12-04 20:18

Tai galite padaryti naudodami grupę:

 select id, addressCode from t group by id, addressCode having min(address) <> max(address) 

Kitas įrašymo metodas gali atrodyti aiškesnis, bet neveikia:

 select id, addressCode from t group by id, addressCode having count(distinct address) > 1 
2
04 дек. Atsakymą pateikė Gordonas Linoffas gruodžio 4 d. 2012-12-04 20:17 '12 at 8:17 pm 2012-12-04 20:17

Asmeniškai aš juos įvedu į failą, naudojant formatą Perl arba Python

 <COL_NAME>: <COL_VAL> 

kiekvienai eilutei, kad failas turi tiek eilių, kiek yra stulpelių. Tada norėčiau diff tarp dviejų failų, darant prielaidą, kad esate „Unix“ arba lyginate juos naudodami tam tikras lygiavertes programas kitoje OS. Jei turite kelis įrašų rinkinius (t. Y. Kelias eilutes), į kiekvieną failų eilutę pridėsiu NUM_DB_ROWS * NUM_COLS eilutes.

0
04 дек. atsakymas pateikiamas amfibiento 04 d. 2012-12-04 20:14 '12 at 8:14 pm 2012-12-04 20:14