Avatar billede ircnoob Nybegynder
18. marts 2008 - 20:37 Der er 15 kommentarer og
2 løsninger

sql select syntax

Hej,

kan i hjælpe mig med et lille formentlig almindelig problem :)

Brugerne kan vælge mellem 4 forskellige bokse, hvor de kun kan udfylde den ene..(resten får værdien "-". Jeg skal så i min sql have hevet disse ud i samme sammenhæng.. Altså ønsker en form for case, hvor den henter "felt1" AS Talvalg" if not "-" else "felt2" AS talvalg if not "-" .. håber det var rimelig forståeligt.. Altså må der ikke bare selectes 4 gange... Må kun komme ud som en enkelt kolonne ...
Avatar billede kalp Novice
18. marts 2008 - 20:52 #1
det kan sikkert gøres smartere, men lav en stored procedure i stil med det her..
virker 100%.

Nu har jeg digtet tabel navn og kolonne navne.

if(exists(select ValgA from ValgMuligheder where ValgA <> '-'))
select ValgA from ValgMuligheder where ValgA <> '-'
else if(exists(select ValgB from ValgMuligheder where ValgB <> '-'))
select ValgB from ValgMuligheder where ValgB <> '-'
else if(exists(select ValgC from ValgMuligheder where ValgC <> '-'))
select ValgC from ValgMuligheder where ValgC <> '-'
else if(exists(select ValgD from ValgMuligheder where ValgD <> '-'))
select ValgD from ValgMuligheder where ValgD <> '-'
Avatar billede kalp Novice
18. marts 2008 - 20:58 #2
Altså må der ikke bare selectes 4 gange... Må kun komme ud som en enkelt kolonne ...

okay du mener måske du ikke vil have 4 selects?
jeg forstod det som der ikke må komme 4 kolonner ud:)
not sure what you mean
Avatar billede ircnoob Nybegynder
18. marts 2008 - 21:01 #3
der må ikke komme 4 kolonner ud.. Jeg har desværre ikke mulighed for at kalde en stored procedure
Avatar billede kalp Novice
18. marts 2008 - 21:03 #4
well.. måske må du køre der der som én sql;)
prøv
Avatar billede ircnoob Nybegynder
18. marts 2008 - 21:12 #5
jaa hehe.. virker hvis jeg fjerner alt andet omkring .. takker, jeg kigger lidt nærmere på det..
Avatar billede kalp Novice
18. marts 2008 - 21:15 #6
hvis det skal hedde "Tilvalg" den kolonne som bliver sendt tilbage så skriver du jo bare "as tilvalg" efter alle select xxxxx
Avatar billede ircnoob Nybegynder
18. marts 2008 - 21:20 #7
hmm returnerer udmiddelbart kun for de første forespørgsel, hvis først én person har levet op til den første forespørgsel så bliver den ved med at spørge på første kolonner.. kan det passe ?
Avatar billede kalp Novice
18. marts 2008 - 21:26 #8
jeg aner ikke hvad du snakker om.
Hvad snakker du med en person? Hvilken person?

Du skal lege, at jeg er en dør ellers forstår jeg ikke hvad du siger:)

Du snakker for indforstået til, at jeg forstår det i hvertfald:D
Avatar billede ircnoob Nybegynder
18. marts 2008 - 21:27 #9
den henter valgene fra en masse personers valg..
Avatar billede ircnoob Nybegynder
18. marts 2008 - 21:27 #10
de der er omtalt som brugere længere oppe .oO
Avatar billede ircnoob Nybegynder
18. marts 2008 - 21:28 #11
lige nu får jeg så valgene, for de som har valgt colunne1.. men ikke colunne2 osv
Avatar billede ircnoob Nybegynder
18. marts 2008 - 21:28 #12
*ikke for de, som har valgt kolonne2 osv
Avatar billede kalp Novice
18. marts 2008 - 21:31 #13
nu er jeg med.. tænke tænke
Avatar billede kalp Novice
18. marts 2008 - 21:34 #14
hvis der ikke står '-' hvad kan der så stå?

mere så forstår hvordan du vil kunne se forskel på hvad der bliver returneret.
du samler det hele under en kolonne, så det undre mig.
Avatar billede ircnoob Nybegynder
18. marts 2008 - 21:37 #15
Så står der fx "09:30", i den næste kolonne kan der stå "10:30" ..
Avatar billede kalp Novice
18. marts 2008 - 21:54 #16
jeg har ikke nogen idé til det når problemstillingen er som den er:)
Avatar billede HenrikSjang Nybegynder
22. marts 2008 - 22:49 #17
Hvis jeg forstår dig ret, så kan dette vise din problemstilling:

CREATE TABLE testTable (
    id INT IDENTITY,
    col1 VARCHAR(20) DEFAULT '-',
    col2 VARCHAR(20) DEFAULT '-',
    col3 VARCHAR(20) DEFAULT '-',
    col4 VARCHAR(20) DEFAULT '-'
)

INSERT testTable(col1) VALUES ('9:30')
INSERT testTable(col1) VALUES ('10:30')
INSERT testTable(col2) VALUES ('11:30')
INSERT testTable(col3) VALUES ('12:30')
INSERT testTable(col4) VALUES ('13:30')
INSERT testTable(col4) VALUES ('14:30')

id | col1 | col2 | col3 | col4
------------------------------
1  | 9:30 | -    |  -  |  - 
2  |10:30 | -    |  -  |  - 
3  |  -  |11:30 |  -  |  - 
4  |  -  | -    |12:30 |  - 
5  |  -  | -    |  -  |13:30 
6  |  -  | -    |  -  |14:30


Denne select:
SELECT
    id,
    CASE
        WHEN col1 = '-' AND col2 = '-' AND col3 = '-' THEN col4
        WHEN col1 = '-' AND col2 = '-' AND col4 = '-' THEN col3
        WHEN col1 = '-' AND col3 = '-' AND col4 = '-' THEN col2
        WHEN col2 = '-' AND col3 = '-' AND col4 = '-' THEN col1
    END AS col
FROM testTable

giver:
id | col
--------
1  | 9:30
2  |10:30
3  |11:30
4  |12:30
5  |13:30 
6  |14:30

som jeg forstår er det du ønsker.

En anden måde der giver samme resultat:
SELECT * FROM
(
    SELECT id, col1 AS col FROM testTable
    WHERE col1 <> '-'
    UNION ALL
    SELECT id, col2 AS col FROM testTable
    WHERE col2 <> '-'
    UNION ALL
    SELECT id, col3 AS col FROM testTable
    WHERE col3 <> '-'
    UNION ALL
    SELECT id, col4 AS col FROM testTable
    WHERE col4 <> '-'
) t2
ORDER BY id
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