Kezdőoldal » Számítástechnika » Egyéb kérdések » Hogyan lehet SQL adattáblából...

Hogyan lehet SQL adattáblából eltávolítani azokat a sorokat ahol az első oszlopban eggyezés van?

Figyelt kérdés

A | B | C

alma|körte|szilva

körte|szilva|alma

alma|narancs|banán


Ebből a harmadik sornak kellene eltűnnie az alma miatt.


Eredetileg többezer sor van. Sz kellene hogy a teljes első oszlopot nézze a parancs.


2020. febr. 5. 16:24
 1/7 timortin ***** válasza:
100%

- Nem írtad, hogy milyen SQL-nyelvjárásban kell a megoldás

- Van a táblán valami egyedi rekordazonosító (ID)?

- Az SQL halmazorientált, ami azt jelenti, hogy ha nem mondod meg neki külön, akkor véletlenszerű lesz, hogy az első avagy a harmadik alma-rekord törlődik. A későbbi rekordot szeretnéd törölni?

2020. febr. 5. 17:48
Hasznos számodra ez a válasz?
 2/7 A kérdező kommentje:

Igazából lehet átfogalmaznám a kérdést.

Excelben van minden adat.

Amit szeretnék, hogy A oszlop alapján csak az egyedi sorok maradjanak meg.

Ha A oszlopban akármennyi duplikátum van akkor az összes teljes sor törlődjön

Tehát az itt említett példából csak a körtés sor maradjon.

A végső formátum ami kell nekem az egy txt.

Hogy lehet ezt a legegyszerűbben megoldani?

2020. febr. 6. 11:28
 3/7 timortin ***** válasza:
100%

Így azért kicsit más a leányzó fekvése. ;)

- Ha a duplikátokból az első előfordulást meg lehetne hagyni, akkor a 'Data' menű 'Remove Duplicates'-a megoldaná a dolgot elegánsan magában az Excelben is.

Itt egy angol link is hozzá egyéb alternatívákkal is kiegészítve:

[link]

- Ha muszáj Excel-ben megoldani, akkor VBA kódot kellhet írni szerintem, szimplán csak összekattingatni mintha nem lehetne. De tévedhetek és az utánam hozzászólók ebben kijavíthatnak.

- Ha kijjebb nézünk az Excelből, akkor itt egy angol és egy magyar link miket lehet csinálni:

[link]

[link]

- Én valszeg Sqlite-ot vetnék be txt import+exporttal, ha tényleg nem lenne elég önmagában az Excel.

2020. febr. 6. 12:01
Hasznos számodra ez a válasz?
 4/7 A kérdező kommentje:

Az alábbival megszűrtem a duplikátumokat az első oszlop alapján.

--------------------------------------------------------

Sub remove_duplicates_by_first_column()

'

' remove_duplicates_by_first_column Makró

'


'

Range("$A:$J").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes


End Sub

--------------------------------------------------------


Így viszont még mindig megmaradt a duplikátumokból az eredeti.

Amit tudnék már egyszerűen szűrni mert ezeknél a megmaradt soroknál a B cellában van szöveg.


Tehát most már csak egy olyan script kellene hogy ha a B cella nem üres akkor törölje az sort.


ezt találtam viszont kellene egy kis móosítás


-------------------------------------------------------


Sub Delete_Rows_Based_On_Value()

'Apply a filter to a Range and delete visible rows

'Source: [link]



Dim ws As Worksheet



'1. Apply Filter

Range("A1:J1398").AutoFilter Field:=2, Criteria1:=""


'2. Delete Rows

Application.DisplayAlerts = False

Range("A2:J100000").SpecialCells(xlCellTypeVisible).Delete

Application.DisplayAlerts = True


'3. Clear Filter

On Error Resume Next

Range("A1:J100000").AutoFilter.ShowAllData

On Error GoTo 0


End Sub

------------------------------------------------------

Ebben annyi a baj, hogy ez az üreseket törli.

Mit kell beírnom, hogy ha azt akarom hogy a nem üreseket törölje?


A másik baj, hogy az kellene, hogy a teljes oszlopot figyelje és ne kelljen manuálisan megadni neki a J oszlopban az elemek számát.

mondjuk egy olyan jól jönne hogy J oszlop all, vagy J oszlop utolsó eleme. nem tudom van e erre valami képlet.

2020. febr. 6. 13:48
 5/7 timortin ***** válasza:
100%

- Elfelejtettem délelött mondani prog.hu-n könnyebben, gyorsabban kapsz választ ilyen VBA-s kérdésekre. :)

- Illetve még azt, hogy ez tipikusan pl.: Pythonos feladat, ha már programozni kell: könnyedén mehet be és ki a textfile, méretlimit is kevésbé van, feldolgozási sebesség is korrektebb, magasszintű adat- és programozási struktúrák is vannak, stb. :)

- Mivel Excelben akarod megoldani a feladatot, így megnéztem még egy körben van-e kattintós megoldás. És van :)

[link]

- A fenti cikk a megoldás alapja.

- Kell egy 'Home'/'Conditional Formatting' range-re (neked első oszlop) 'Duplicate Values'. Ha interaktívan töltesz fel oszlopot, akkor is azonnal szineződik az új érték, ha volt már korábban.

- Ezek után már csak szét kell választani a színes és nem színes első oszlopú rekordokat.

- Ráállsz valamelyik fehér (single value-s) oszlopú rekordra, jobb egérgomb, 'Filter'/Filter by Selected Cell's Color

- Az összes rekordot kijelölöd átmásolod más sheetre, majd save as text.

2020. febr. 6. 16:16
Hasznos számodra ez a válasz?
 6/7 A kérdező kommentje:
Köszi, igazából automatizálni szeretném. Winautomation-al töltöm le a sima txt file-t szerverről. Abban tudok ilyen text makrókat futtatni. De abban nagyon bonyolult megoldani a duplikátum szürést. Pipeokat cseréltem sortörésre majd a sorokat pakolásztam különböző listákba és azokat hasonlítgattam. Ezért gondoltam hogy inkább winautomation-al kimentem a szöveget excelbe majd makrót is lehet vele futtatni. És így excelben lényegesen egyszerűbben lehet duplikátunit szűrni Excel makrókkal. De akkor megnézem az oldalt amit írtál. Köszi!
2020. febr. 6. 23:02
 7/7 timortin ***** válasza:
100%

Hát ha valamire, akkor erre a Python jó, de te tudod, semmiről nem akarlak lebeszélni:


Itt egy példa a Python nagyszerűségére

Egyszer kell csak végigolvasni az egész input textfile-t (ennél nincs jobb performancia) az alábbi egyetlen magasszintű paranccsal és csak az 1-nek megfelelőket írod ki.

PS: A df az DataFrame, egy tábla tulajdonképpen, rekordokkal, mezővel.


df.groupby(['col1', 'col2']).size()


[link]

2020. febr. 6. 23:30
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!