Avatar billede Slettet bruger
06. maj 2010 - 09:50 Der er 4 kommentarer og
1 løsning

Hjælp til SQL query

Jeg har følgende forespørgsel:

declare @ContractPartnerId uniqueidentifier
declare @ReportId uniqueidentifier
declare @LanguageId uniqueidentifier
declare @TargetDate datetime

set @ContractPartnerId = '10BFF3E6-09A2-4C99-9487-A135284F185F'
set @ReportId = 'A80BB893-3B66-443F-8C3D-19A6E6ACEF5C'
set @LanguageId = '0EA348B3-9B83-46D5-914D-FAA0C30DFB4C'
set @TargetDate = GETDATE()

SELECT DISTINCT RIT.Id, RI.ReportId, RIT.ReportItemId, RIT.ContractPartnerId, RIT.LanguageId, RI.Name, RIT.Text, RIT.FromDate, RIT.ToDate
FROM ReportItemTexts RIT
INNER JOIN ReportItems RI ON RI.Id = RIT.ReportItemId
WHERE RI.ReportId = @ReportId
AND (RIT.ContractPartnerId = @ContractPartnerId or (RIT.ContractPartnerId is null and @ContractPartnerId is null))
AND RIT.LanguageId = @LanguageId
AND RIT.FromDate <= @TargetDate
AND (RIT.ToDate IS NULL OR RIT.ToDate >= @TargetDate)


Det henter blot nogle rapport tekster ud baseret på input parametrene, det virker også 100%. Men som den er nu henter den KUN tekster fra den ContractPartner som er angivet. Jeg vil gerne have lidt intelligens ind i kaldet, da en rapport tekst for en bestemt ContractPartner ikke altid findes, skal den falde tilbage på en fallback text, hvor ContractPartner er NULL, for hver reportitem. Dvs at jeg reelt kan oprette alt med ContractPartner NULL og så benytter alle CPs de tekster, men opretter jeg én tekst for en bestemt CP, så benytter han alle default tekster, lige bortset fra den ene da den tekst matcher input ContractpartnerId, resten tages fra fallback (NULL)

Helt konkret, hvis den ikke finer noget på den angive CP, hent fra NULL CP, individuelt for hver row.

Så hvordan kan jeg lave dette kald, så det er indbygget logik? hvis det overhoved giver mening.
Avatar billede teepee Nybegynder
06. maj 2010 - 10:33 #1
Læg dine templates/default værdier i en anden tabel (kan også gøre i din from clause som en select/inline view) og lav en outer join til tabellen med de partnetspecifiekke data, læg det i et view hvor du trækker både default værdien og den partnerspecifikke kolonne ud, så giver resten vist sig selv med en IsNull(partnerkolonne, defaultkolonne). Håber at det giver mening.
Avatar billede Slettet bruger
06. maj 2010 - 12:27 #2
Jeg ville være superglad hvis du kunne stykke et eksempel sammen?
Avatar billede Syska Mester
06. maj 2010 - 12:41 #3
Simple eksemple:

SELECT T.TextID, ISNULL(TT.Text, T.Text) FROM Texts T
LEFT JOIN TextTranslations TT ON T.TextID = TT.TextID
Avatar billede Slettet bruger
03. september 2010 - 20:54 #4
Buzzz smid et svar
Avatar billede Syska Mester
04. september 2010 - 02:23 #5
svar
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