Avatar billede moller06 Nybegynder
25. juli 2006 - 08:53 Der er 9 kommentarer

Udtræk giver NULL - vil alligevel have en record skrevet ud

Hej, jeg har et udtræk til noget statistik hvor jeg skal vide hvor mange af en række ansøgere der har sagt "ja tak", "nej tak" eller "ude i tilbud".

Dette gør jeg nogenlunde på denne måde:

select case when wpo3.name_da is null then 'Ude i tilbud' else wpo3.name_da END as 'Stat_del', cast(count(1) as nvarchar) as 'Antal', cast(datepart(week, getdate()) as nvarchar) as 'Ugenr'

from wait_applicant wa (nolock)

inner join wac (...)

inner join wapd (...)

left join wapd2 (...)

/* prioriteringstilbud */
left join wait_applicantparameterdata wapd3 (nolock) on (wapd3.fk_customparamdef = '3D7DF84D-55B3-4F5D-B471-1DD9C3CD433F' and wa.id = wapd3.fk_applicant)
left join WAIT_parameteroptions wpo3 (nolock) on (wapd3.fk_optionparameter = wpo3.id)

where wa.deletedate is null and wpo.name_da='Ja' and wpo2.name_da = 'Godkendt'
group by wpo3.name_da

----------------------
Det er i wpo3.name_da at de forskellige svartyper ligger, altså "ja tak", "nej tak" og hvis det giver NULL betyder det at "ude i tilbud"

Jeg får et recordsæt ud der ligner følgende:

Stat_del      | Antal | Ugenr. |
--------------------------------
Ude i tilbud  |      8  |  30  |
Ja tak        |  1  |  30  |
--------------------------------

Mit problem er at selvom der ikke er nogen som har valgt "nej tak" kategorien endnu - så vil jeg gerne have at der kom en record med "nej tak" og et antal på 0.

Men jeg har åbenbart fået for meget varme, for jeg kan ikke lige hitte en løsning. Jeg håber at der er andre der kan.
Avatar billede teepee Nybegynder
25. juli 2006 - 09:17 #1
Skal din inner join ikke være en out join, ellers forsvinder rækken jo.
Avatar billede moller06 Nybegynder
25. juli 2006 - 09:59 #2
Du må desværre lige specificere mere konkret hvor??
de første joins er eksempelvis til nogle andre tabeller.

Det er i wpo3 at de 2(3) forskellige svarmuligheder ligger (altså "ja tak", "nej tak" og hvis intet valgt (NULL) )
Avatar billede teepee Nybegynder
25. juli 2006 - 10:17 #3
Jeg tror faktisk mere at det er din group by der ikke kan lide din null kolonne. Distinct udelader null, og det tror jeg også at group by gør. Jeg tror at du skal bruge group by "din case"
Avatar billede moller06 Nybegynder
25. juli 2006 - 10:27 #4
øhm... men det løser jo ikke rigtigt problemstillingen. Dem der giver NULL har jeg jo allerede håndteret ved min CASE.

Mit problem var jo at jeg skulle have en ekstra record ind - altså en record hvor der står "Nej tak - antal 0 - ugenr. 30"

Og jeg kan godt følge at det måske er en outer join der skal til ved wpo3 - men det giver ikke rigtig noget når jeg prøver.
Avatar billede teepee Nybegynder
25. juli 2006 - 10:46 #5
Ja, ok, det er bare mig... Så må det være din LEFT JOIN af wpo3. Har du prøvet med en right?
Avatar billede moller06 Nybegynder
25. juli 2006 - 10:53 #6
Ja - så kommer der kun "ja tak frem" idet det er den eneste som der faktisk er nogen som har valgt.
:(
Avatar billede moller06 Nybegynder
25. juli 2006 - 11:08 #7
Det er mine afgrænsninger i eksempelvis where-clausen der gør at der ikke kommer nogen "nej tak" frem - og det er jo som sådan også rigtig nok.

Men hvis count giver 0 - kan man så ikke tvinge den til at skrive den alligevel.
Avatar billede kjulius Novice
30. juli 2006 - 23:49 #8
Har du prøvet at gentage din case sætning i group by sektionen?

GROUP BY CASE WHEN wpo3.name_da IS NULL THEN 'Ude i tilbud' ELSE wpo3.name_da END

eller evt.

GROUP BY Stat_del
Avatar billede janus007 Nybegynder
01. august 2006 - 00:18 #9
Nu forstår jeg ikke lige du har lavet din select sådan, men det kan vi altid kigge nærmere på hvis du har behov for det. Anyway.. Måden at få eks.vis uger med ud på eller andet som altid skal være læsbart er at bruge en basistabel. Lav en tabel med samtlige ugenumre i og join op imod den vha. en right join, på den måde får du alle uger med som du vil kigge på - du kan evt. begrænse ugerne i din where-clause. Nu får du jo nok en null-value eller flere med ud, brug isnull(...., 0) til dette.
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