Ich mache einen SSRS-Bericht und erlaube Benutzereingaben bei der Entscheidung, zwei Tabellen zu verbinden. Wenn sie No(0)
wählen, dann ist diese Abfrage ausgeführt wird:Bedingte Verknüpfung basierend auf Benutzereingabe
select distinct case when book.PROPCODE = '00' then 'R6' else book.PROPCODE end as PROPCODE,
BKNAME,
BKARRIVE,
BKDEPART,
BKRMNUM,
book.BOOKID
from NGFMBOOK book
inner join NGFMBOOK2 on ltrim(rtrim(replace(replace(Uniqueid2,'/','0'),'-',0))) = ltrim(rtrim(str(book.BOOKID)))
where BKARRIVE between @StartDate and @EndDate
and book.PROPCODE in (@PropCode)
Order By BookID
Wenn sie wählen Yes(1)
dann eine zusätzliche Join wird der Abfrage hinzugefügt:
select distinct case when book.PROPCODE = '00' then 'R6' else book.PROPCODE end as PROPCODE,
BKNAME,
BKARRIVE,
BKDEPART,
BKRMNUM,
book.BOOKID
from NGFMBOOK book
inner join NGFMBOOK2 on ltrim(rtrim(replace(replace(Uniqueid2,'/','0'),'-',0))) = ltrim(rtrim(str(book.BOOKID)))
inner join [RPV1Data\RPV1Data].RP_V1Data.dbo.NGFUNCT func ON book.BOOKID = func.BOOKID --this is the extra join
where BKARRIVE between @StartDate and @EndDate
and book.PROPCODE in (@PropCode)
Order By BookID
Gibt es eine Möglichkeit, eine Case-Anweisung oder etwas ähnliches haben damit ich nicht zwei völlig unterschiedliche Abfragen haben muss? Ich versuche
set @queryHeader = 'select distinct case when book.PROPCODE = ''00'' then ''R6'' else book.PROPCODE end as PROPCODE, BKNAME, BKARRIVE, BKDEPART, BKRMNUM, book.BOOKID from NGFMBOOK book inner join NGFMBOOK2 on ltrim(rtrim(replace(replace(Uniqueid2,''/'',''0''),''-'',0))) = ltrim(rtrim(str(book.BOOKID)))'
set @option1 = 'inner join NGFMBOOK2 on ltrim(rtrim(replace(replace(Uniqueid2,''/'',''0''),''-'',0))) = ltrim(rtrim(str(book.BOOKID)))'
set @option2 = 'inner join NGFMBOOK2 on ltrim(rtrim(replace(replace(Uniqueid2,''/'',''0''),''-'',0))) = ltrim(rtrim(str(book.BOOKID))) inner join [RPV1Data\RPV1Data].RP_V1Data.dbo.NGFUNCT func ON book.BOOKID = func.BOOKID'
set @queryFooter = 'where BKARRIVE between @StartDate and @EndDate and book.PROPCODE in (@PropCode) Order By BookID'
set @query = @queryHeader + case when @SearchFun = 1 then @option2 else @option1 end + @queryFooter
exec(@query)
Aber das gibt mir einen Fehler (falsche Syntax nahe 'BKARRIVE')
das funktioniert, wenn @SearchFun = 1 (das ist was ich schon mal anstelle von @paremeter benutzt habe). Wenn es jedoch 0 ist, gibt meine Abfrage nichts zurück. – gilliduck
Ich aktualisierte es mit linker Verknüpfung und einer anderen Bedingung in where-Klausel. Können Sie überprüfen, ob es funktioniert? – CuriousKid
Verpasste das Extra und die Klausel. Jetzt bekomme ich die 7, die ich will, wenn SearchFun 1 ist, aber 0, wenn SearchFun 0 ist (sollte 51 zurück). – gilliduck