Avatar billede pafa Nybegynder
11. juni 2004 - 14:13 Der er 14 kommentarer og
1 løsning

Importere kun unikke linier fra Excel

Hejsa

Jeg har en SQL Server 2000 hvor jeg importerer data fra et Excel regneark i en database.

Regnearket ser ca sådan ud:

NR  NAVN  Farve
1  Ole  Rød
2  Per  Blå
3  Hans  Grøn
1  Ole  Rød

Problemet er at Ole står der 2 gange selvom det er den samme. Hvordan kan jeg fjerne denne dublet ved import således at databasen ser sådan ud:

NR  NAVN  Farve
1  Ole  Rød
2  Per  Blå
3  Hans  Grøn

Nogen ideer ?
Avatar billede pafa Nybegynder
11. juni 2004 - 14:27 #1
Forresten...

Jeg ved at jeg kan lave en sql statement der siger

SELECT DISTINCT NR
FROM kilde

Men så importerer den kun rækken med NR og ikke NAVN og FARVE

Men hvad vil koden hedde hvis jeg vil fjerne dubletter fra NR og derefter importere alle rækkerne ?
Avatar billede strych9 Praktikant
11. juni 2004 - 14:33 #2
SELECT NAVN, Farve, DISTINCT NR
FROM kilde

??
Avatar billede pafa Nybegynder
11. juni 2004 - 14:46 #3
Den mener ikke syntaxen er korrekt :-(
Avatar billede strych9 Praktikant
11. juni 2004 - 14:57 #4
Måske hører kommaerne ikke hjemme der.. hmmm..
Det er T-SQL du forsøger at lave ikke? Jeg kigger lige i en bog.
Avatar billede strych9 Praktikant
11. juni 2004 - 15:32 #5
Her er lidt spiselig sql info:
http://www.winnetmag.com/SQLServer/Article/ArticleID/5115/5115.html
http://sqlcourse2.com/intro2.html

Så vidt jeg kan se så skal ALL eller DISTINCT stå lige efter SELECT. ALL er default.
Så dette:
SELECT DISTINCT NR, NAVN, Farve
FROM kilde;
vil helt sikkert virke. Men om det så er det du virkelig gerne vil have er meget tvivlsomt idet den lader til kun at vælge som distinct fra alle columns.
Avatar billede strych9 Praktikant
11. juni 2004 - 15:33 #6
eg, prøv at lave en "4 Ib Grøn" og se om det virker.
Avatar billede janus_007 Nybegynder
11. juni 2004 - 22:01 #7
Du kunne evt. importere alt igennem Enterprise Managers - DTS Import/Export Wizard her vælger du dit Excel ark som kilde og den db/ tabel som du vil bruge. Under specify Table Copy or Query vælger "Use a query to specify the data tio transfer"

her bruger du flg. statement

select distinct * from dinTabel

og vupti
Avatar billede pafa Nybegynder
12. juni 2004 - 00:28 #8
Janus:

Det er det som jeg allerede har prøvet - problemet er at den så kun importerer den kolonne som jeg har filtreret, de andre kolonner som hænger sammen med den bliver ikke importeret.

Strych: Korrekt, den har jeg også prøvet, men så filterer den alt data som jeg angiver, og den skal kun filtrere en bestemt kolonne, og derefter importere alle kolonner fra regnearket (som nu skulle være fjernet for dubletter)
Avatar billede janus_007 Nybegynder
12. juni 2004 - 10:15 #9
Det lyder altså underligt, det udtryk som jeg har skrevet tager alle kolonner og ikke kun en!

anyway. Så importer altsammen ind i en tabel og herefter tager du distinct..

pseudo:
import to excel into myWorkTable...
derefter
select distinct * into myFinalTable from myWorkTable
Avatar billede pafa Nybegynder
14. juni 2004 - 09:05 #10
Janus:

Det er korrekt at den ved dit første foreslag importerer alle kolonnerne - med den fjerner ikke dubletterne - den importerer alt data

Dit foreslag nummer 2 forstår jeg ikke helt, kan du præcisere ?

Jeg prøver lige at forklare problemet 1 gang til (for at være sikker på at i forstår problemstillingen)

Excel arket ser sådan ud (der er selvf mange flere kolonner):

    A      B      C
1    PC      Navn    NR
2    Dell    Ole    1000
3    Dell    Hans    1001
4    Dell    Per    1002
5    Dell    Ole    1000
6    Dell    Peter  1003

Det jeg ønsker er at den fjerner linie 5 inden den importerer dataene, da det er en dublet - således at databasen ser sådan ud:

    A      B      C
1    PC      Navn    NR
2    Dell    Ole    1000
3    Dell    Hans    1001
4    Dell    Per    1002
5    Dell    Peter  1003

Jeg kan godt fjerne dubletterne fra kolonne C, men så er det kun række C der bliver importeret.

Jeg skal dog have alle kolonnerne importeret, men den skal fjerne de linier hvor der er en dublet i kolonne C

Hvordan ville et SQL statement til sådan en operation se ud ?

Jeg vil gerne bruge den som en DTS pakke i SQL Server 2000...
Avatar billede janus_007 Nybegynder
14. juni 2004 - 11:11 #11
Hejsa..

Jo det er nu ikke så kompliceret som det gøres til. Og kan som sagt løses på flere måder.

Så lav en group by ala:

select min(id), navn, farve
from kilde
group by navn, farve
order by min(id)

Den vil give dig alle unikke navne + farve og samtidigt bruge laveste id for den aktuelle række!
Avatar billede pafa Nybegynder
14. juni 2004 - 13:42 #12
Nu spørger jeg nok dumt (er ikke en SQL haj)

Hvad mener du med min(id) ?
Avatar billede pafa Nybegynder
14. juni 2004 - 13:55 #13
Fandt ud af det.....men hmmm

Nu fjerner den for mange linier - kan de passe den går ind og fjerner alle de linier hvor min(id), navn og farve er de samme ?
Avatar billede janus_007 Nybegynder
14. juni 2004 - 17:39 #14
hej igen...

Nu så jeg lige du havde skrevet nr istedet for id, dvs.
select min(nr), navn, farve
from kilde
group by navn, farve
order by min(nr)

fyi: min er en funktion til at finde minimum værdien, der findes, for at det ikke skal være løgn, også en max *S*

Håber det virker bedre nu ?

Hvis du er ny til sql, kan jeg anbefale et godt startsted:
http://www.w3schools.com/sql/default.asp
Avatar billede pafa Nybegynder
14. juni 2004 - 20:17 #15
Jeg fandt ud af den ved at lave den i Access og konvertere koden til SQL - men du får selvølgelig point for at prøve.....tak for hjælpen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester