Avatar billede dennisbjorn Juniormester
25. januar 2010 - 13:10 Der er 5 kommentarer og
1 løsning

Hjælp til select med case

Hej,

Jeg har denne select som henter data fra to tabeller:

StrSQL="SELECT TISFC001.pdno, TISFC001.ItemID, tbl_FQCprodukter.InspekLevel " &_
              "FROM TISFC001 " &_
              "LEFT OUTER JOIN tbl_FQCprodukter tbl_FQCprodukter ON tbl_FQCprodukter.VareNr=TISFC001.ItemID " &_
              "WHERE TISFC001.apdt='01-01-1900' "

Feltet tbl_FQCprodukter.InspekLevel indeholder værdierne A, B eller C
Feltet TISFC001.pdno indeholder unikke værdier
Feltet TISFC001.ItemID indeholder dubletter

Jeg ønsker at afgrænse resultatet, således at jeg får alle linier når tbl_FQCprodukter.InspekLevel = A eller B, men kun én linie per ItemID (feltet TISFC001.ItemID) når tbl_FQCprodukter.InspekLevel = C

Kan det ikke laves med en case?
Avatar billede janus_007 Nybegynder
25. januar 2010 - 15:44 #1
Inden svaret bliver perfekt kunne det være rart at høre hvordan du kalder den sql? Igennem hvilken applikation?
Avatar billede dennisbjorn Juniormester
25. januar 2010 - 15:55 #2
Databasen er MS-SQlserver 2000 og jeg henter dato ud på en asp side.
Avatar billede janus_007 Nybegynder
25. januar 2010 - 18:56 #3
Så du bygger strengen op i gammeldags ASP ? Eller er det igennem en sproc?
25. januar 2010 - 19:08 #4
Hvorfor ikke indrette din query saaledes at du med det samme faar de linier ud du skal bruge og saa vise dem paa siden?  Det synes mig enklere end at querye saa du faar for mange linier og saa bagefter sortere dem ud paa siden.

Jeg kender ikke din SQL dialekt - jeg har lavet en query der virker i MySql; jeg haaber du selv kan omsaette det i din dialekt.  Din problemstilling var ikke helt klar for mig, saa jeg har lavet de foelgende antagelser:

(1) For hver ItemID kan der eksistere adskillige pdno'er.
(2) Naar InspLevel er A eller B vil du for hver ItemID have samtlige pdno'er, men naar InspLevel er C vil du have antallet af pdno'er.

Min query er derfor en UNION query der foerst soeger efter alle linier hvor InspLevel er A eller B og derefter soeger for antallet af linier hvor InspLevel er C.

For at teste det lavede jeg to tabeller, denisTISFC001 og denistbl_FQCprodukter.  Jeg fyldte et par vaerdier i.

Her kommer foerst min query, og derefter kommer mine tabeller og vaerdierne.

SELECT pdno, ItemID, InspLevel
FROM denisTISFC001
LEFT JOIN denistbl_FQCproducter ON ItemID = VareNr         
WHERE aptd='1900-01-01' AND InspLevel = 'A' OR InspLevel = 'B'
UNION
SELECT COUNT(*), ItemID, InspLevel
FROM denisTISFC001
LEFT JOIN denistbl_FQCproducter ON ItemID = VareNr         
WHERE aptd='1900-01-01' AND InspLevel = 'C'
GROUP BY InspLevel

Resultatet er, med de givne tabeller og vaerdier, det foelgende:

 
pdno  ItemID  InspLevel 
1 1 A
1 1 B
2 1 A
2 1 B
3 1 A
3 1 B
1 2 B
2 2 B
3 2 B
4 2 B
7 2 C

Og her er tabeller og vaerdier:

CREATE TABLE denisTISFC001(pdno INT, ItemID INT, aptd DATE);

CREATE TABLE denistbl_FQCproducter(VareNr INT, InspLevel CHAR(1));

INSERT INTO denisTISFC001 VALUES(1, 1, '1900-01-01');
INSERT INTO denisTISFC001 VALUES(2, 1, '1900-01-01');
INSERT INTO denisTISFC001 VALUES(3, 1, '1900-01-01');
INSERT INTO denisTISFC001 VALUES(1, 2, '1900-01-01');
INSERT INTO denisTISFC001 VALUES(2, 2, '1900-01-01');
INSERT INTO denisTISFC001 VALUES(3, 2, '1900-01-01');
INSERT INTO denisTISFC001 VALUES(1, 2, '1900-01-01');
INSERT INTO denisTISFC001 VALUES(2, 2, '1900-01-01');
INSERT INTO denisTISFC001 VALUES(3, 2, '1900-01-01');
INSERT INTO denisTISFC001 VALUES(4, 2, '1900-01-01');

INSERT INTO denistbl_FQCproducter VALUES(1, 'A');
INSERT INTO denistbl_FQCproducter VALUES(2, 'B');
INSERT INTO denistbl_FQCproducter VALUES(1, 'B');
INSERT INTO denistbl_FQCproducter VALUES(2, 'C');
Avatar billede dennisbjorn Juniormester
26. januar 2010 - 09:29 #5
Hejsa,

SQL-scriptet skal bruges på asp-side.

Christian - din løsning med UNION var det jeg skulle bruge - mange tak for hjælp!

Husk at svare :-)
26. januar 2010 - 09:43 #6
Glad du kunne bruge det.
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