
/* SQL-Prozeduren für die Datenbank FKL der mobilen Datenerfassung
	Generierung: Hauptdatenbank skripten und Benutzerrollen durch public ersetzen

	2024-03-30	erstellt
	*/

use FKL
go

/****** Object:  UserDefinedFunction [dbo].[_f_0appended]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create function [dbo].[_f_0appended] (@as varchar(255), @ct int)
returns varchar(512)
as
/* liefert ein varchar der mindestlaenge @ct durch nachstellen der erforderlichen anzahl von 0en
	2015-12-01	Klopfer: erstellt
*/
begin
  declare @ls varchar(512)
  select @ls = ltrim(rtrim(@as))
  return case when @ct <= datalength(@ls) then @ls else @ls + replicate('0', @ct - datalength(@ls)) end
end
GO
GRANT EXECUTE ON [dbo].[_f_0appended] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[_f_0appended] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[_f_cExists]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[_f_cExists] (@table varchar(40), @column varchar(40))  
RETURNS int AS  
/*
  2012-09-21 Klopfer: abhängig von SQLServer-Version
  */
BEGIN 
  declare @ret int
  select @ret = 0
  if (patindex('8.%', cast(serverproperty('ProductVersion') as varchar)) > 0) begin
	-- SQLServer 2000:
	  if exists(select * from sysobjects o join syscolumns c on o.id = c.id where o.xtype = 'U' and lower(o.name) = lower(@table) and lower(c.name) = lower(@column))
		select @ret = 1
  end
  else begin
	  if exists(select * from sys.objects o join sys.columns c on o.object_id = c.object_id where o.type = 'U' and lower(o.name) = lower(@table) and lower(c.name) = lower(@column))
		select @ret = 1
  end
  return @ret
END


GO
GRANT EXECUTE ON [dbo].[_f_cExists] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[_f_cExists] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[_f_cutTrailing0]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create function [dbo].[_f_cutTrailing0] (@s varchar(255))
returns varchar(255) as
/* schneidet alle an @s anhängenden 0 ab
	2015-12-01	Klopfer: erstellt
	*/
begin
declare @stop bit

select @stop = 0
while (len(@s) > 0) and (@stop = 0) begin
	if (right(@s, 1) = '0') select @s = left(@s, len(@s) -1) else select @stop = 1
end

return @s
end
GO
GRANT EXECUTE ON [dbo].[_f_cutTrailing0] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[_f_cutTrailing0] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[_obs_f_Probestellen4gbID]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[_obs_f_Probestellen4gbID] (@gbID int, @sep varchar(10) = null)
/*
	2015-12-01	Klopfer: @psNr auf vc50
	*/
RETURNS varchar(255) AS
BEGIN 
--
declare @ls varchar(255), @psNr varchar(50)
declare @ct int
select @ls = ''
if (isnull(@sep, '') = '') begin
  select @ct = count(ps2bID) from ps2b join bewertung on ps2bBewertung = bID where bGesamtbewertung = @gbID
  select @psNr = min(psProbestellennr) from probestelle join ps2b on psID = ps2bProbestelle join bewertung on ps2bBewertung = bID where bGesamtbewertung = @gbID
  select @ls = @psNr
  if (@ct > 1) select @ls = @ls + ' u.a.'
end
else
  select @ls = @ls + psProbestellennr + @sep from probestelle join ps2b on psID = ps2bProbestelle join bewertung on ps2bBewertung = bID where bGesamtbewertung = @gbID
--
return @ls
--
END


GO
GRANT EXECUTE ON [dbo].[_obs_f_Probestellen4gbID] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[_obs_f_Probestellen4gbID] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[_obs_f_Probestellen4wkID]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[_obs_f_Probestellen4wkID] (@wkID int, @sep varchar(10) = null)
/*
	2015-12-01	Klopfer: @psNr auf vc50
	*/
RETURNS varchar(4000) AS
BEGIN 
--
declare @ls varchar(4000), @psNr varchar(50)
declare @ct int
select @ls = ''
if (isnull(@sep, '') = '') begin
  -- ohne Sep: nur die erste ps und ggf. der Hinweis auf weitere:
  select @ct = count(ps2bID) from ps2b join bewertung on ps2bBewertung = bID join abschnitt on bAbschnitt = aID where aWasserkoerper = @wkID
  
  select @psNr = min(psProbestellennr) 
  from probestelle join ps2b on psID = ps2bProbestelle join bewertung on ps2bBewertung = bID join abschnitt on bAbschnitt = aID 
  where aWasserkoerper = @wkID
  
  select @ls = @psNr
  if (@ct > 1) select @ls = @ls + ' u.a.'
end
else
  -- alle ps getrennt durch Sep:
  select @ls = @ls + psProbestellennr + @sep 
  from probestelle join ps2b on psID = ps2bProbestelle join bewertung on ps2bBewertung = bID join abschnitt on bAbschnitt = aID 
  where aWasserkoerper = @wkID
--
return @ls
--
END


GO
GRANT EXECUTE ON [dbo].[_obs_f_Probestellen4wkID] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[_obs_f_Probestellen4wkID] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_0filled]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
create function [dbo].[f_0filled] (@as varchar(255), @ct int)
returns varchar(255)
as
/* liefert ein varchar der laenge @ct durch voranstellen der erforderlichen anzahl von 0en
 2004-09-23	keyn: erstellt
 2013-03-28	klopfer: liefert @ls, wenn @ct <= dessen Länge ist
*/
begin
  declare @ls varchar(255)
  select @ls = ltrim(rtrim(@as))
  return case when @ct <= datalength(@ls) then @ls else replicate('0', @ct - datalength(@ls)) + @ls end
end
GO
GRANT EXECUTE ON [dbo].[f_0filled] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_0filled] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_aBezeichnungX]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[f_aBezeichnungX] (@aID int)  
RETURNS varchar(255) AS  
BEGIN 

return (
select cast(isnull(wkNummer, '') as char(12)) + isnull(wkBezeichnung, '') + ' - ' + isnull(aBezeichnung, '')
from abschnitt join wasserkoerper on wkID = aWasserkoerper
where aID = @aID
)

END


GO
GRANT EXECUTE ON [dbo].[f_aBezeichnungX] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_aBezeichnungX] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_Abschnitt]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[f_Abschnitt] (@aID int)  
RETURNS varchar(255) AS  
BEGIN 

return (select case when isnull(aBezeichnung, '') = '' then 'Gesamter WK' else aBezeichnung end from abschnitt where aID = @aID)

END


GO
GRANT EXECUTE ON [dbo].[f_Abschnitt] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_Abschnitt] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_aktMandant]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE function [dbo].[f_aktMandant] ()
returns int 
as
/* liefert den ID des aktivierten Mandanten
	2002-08-24	keyn: func erstellt
	2021-01-29	klopfer: liefert 0
*/

begin
  return 0
end
GO
GRANT EXECUTE ON [dbo].[f_aktMandant] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_aktMandant] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_AnzahlProben4bID]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[f_AnzahlProben4bID] (@bID int)  
RETURNS int AS  
BEGIN 
--
declare @ret int
select @ret = count(*) from ps2b where ps2bBewertung = @bID
--
return @ret
--
END


GO
GRANT EXECUTE ON [dbo].[f_AnzahlProben4bID] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_AnzahlProben4bID] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_AnzahlProben4wkID]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[f_AnzahlProben4wkID] (@wkID int)  
RETURNS int AS  
BEGIN 
--
declare @ret int
select @ret = count(*) from ps2b join bewertung on ps2bBewertung = bID join abschnitt on bAbschnitt = aID where aWasserkoerper = @wkID 
--
return @ret
--
END


GO
GRANT EXECUTE ON [dbo].[f_AnzahlProben4wkID] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_AnzahlProben4wkID] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_AnzahlReferenzarten]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[f_AnzahlReferenzarten] (@aID int)  
RETURNS int AS
BEGIN 

return (select count(*) from referenzwert where rwAbschnitt = @aID and isnull(rwBetrag, 0) <> 0)

END


GO
GRANT EXECUTE ON [dbo].[f_AnzahlReferenzarten] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_AnzahlReferenzarten] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_AnzahlReferenzlisten]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[f_AnzahlReferenzlisten] (@wkID int)
RETURNS int
AS
BEGIN

return (select count(*) from abschnitt where aWasserkoerper = @wkID and dbo.f_AnzahlReferenzarten(aID) > 0)

END


GO
GRANT EXECUTE ON [dbo].[f_AnzahlReferenzlisten] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_AnzahlReferenzlisten] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_bPraedikat4bNote]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[f_bPraedikat4bNote] (@bNote float)  
RETURNS int AS  
BEGIN 

return dbo.f_kID4kDaten( dbo.f_Praedikat4Note(@bNote), 'bewpraed' )

END


GO
GRANT EXECUTE ON [dbo].[f_bPraedikat4bNote] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_bPraedikat4bNote] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_DummyUndFang]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[f_DummyUndFang](@bID int)
RETURNS varchar(255)
/* liefert eine Aufzaehlung aller der Bewertung @bID zugeordneten dummies, zu denen zugleich Faenge existieren
*/
AS
BEGIN

declare @ret varchar(1000)

select @ret = ''
select @ret = @ret + case when @ret = '' then '' else '; ' end + rBezeichnung 
from referenz join [dummy] on rID = dmReferenz
where isnull(dmOn, 'F') = 'T' and dmBewertung = @bID and exists(
	select 1 
	from fischart join fangprot on fID = fpFischart join probestelle on psID = fpProbestelle join ps2b on ps2bProbestelle = psID
	where fReferenz = dmReferenz and ps2bBewertung = @bID
)

return left(@ret, 255) 

END


GO
GRANT EXECUTE ON [dbo].[f_DummyUndFang] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_DummyUndFang] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_Einzugsgebiet]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


CREATE function [dbo].[f_Einzugsgebiet] (@gID int)
returns char(3)
as
/* liefert die Nummer des Einzugsgebietes für das Gewässer @gID
	select gID, gGebiets_kz, dbo.f_Einzugsgebiet(gID) EZG from gebiets_kz

 2019-07-01	klopfer: erstellt
*/
begin
	return 
	(select left(
		+	case when gTyp = 2 /* Standgewässer*/	
			then '999'
			else case dbo._f_0appended(LEFT(gGebiets_kz, 3), 3) 
					when '540' then '549'
					when '500' then '537'
					when '531' then '537'
					when '660' then '999'
					when '661' then '674'
					when '663' then '674'
					when '000' then '542'
					else dbo._f_0appended(LEFT(gGebiets_kz, 3), 3) 
					end
			end
		, 30)
	from gebiets_kz
	where gID = @gID)
end
GO
GRANT EXECUTE ON [dbo].[f_Einzugsgebiet] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_Einzugsgebiet] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_Farbe4Index]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[f_Farbe4Index] (@index int)  
RETURNS int AS  
BEGIN 

declare @i int
if (@index is null) return null

select @i = kFarbe from katalog where kKatalogart = 'bewpraed' and kOrdnung = @index
return @i

END


GO
GRANT EXECUTE ON [dbo].[f_Farbe4Index] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_Farbe4Index] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_fBez_deutsch]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[f_fBez_deutsch] (@fID int)  
RETURNS varchar(80) AS  
BEGIN 

return (select fBez_deutsch from fischart where fID = @fID)

END


GO
GRANT EXECUTE ON [dbo].[f_fBez_deutsch] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_fBez_deutsch] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_fFaktor]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[f_fFaktor] (@fID int)  
RETURNS float AS  
BEGIN 

return (select fFaktor from fischart where fID = @fID)

END


GO
GRANT EXECUTE ON [dbo].[f_fFaktor] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_fFaktor] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_fID4fBez_deutsch]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[f_fID4fBez_deutsch] (@fBez_deutsch varchar(80))  
RETURNS int AS  
BEGIN 

return (select min(fID) from fischart where ltrim(rtrim(lower(fBez_deutsch))) = ltrim(rtrim(lower(@fBez_deutsch))))

END


GO
GRANT EXECUTE ON [dbo].[f_fID4fBez_deutsch] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_fID4fBez_deutsch] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_Gesaeubert]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE function [dbo].[f_Gesaeubert] (@as varchar(255))
returns varchar(255) 
as
-- entfernt alle Nicht-Ziffern und Nicht-Buchstaben und wandelt alle Buchstaben in Kleinbuchstaben
begin
	if (isnull(@as, '') = '') return null

	declare @ls varchar(255), @char char(1)
	declare @pos int, @ct int

	select @ct = datalength(@as)
	select @pos = 1
	select @ls = ''
	while (@pos <= @ct) begin
		select @char = substring(@as, @pos, 1)
		if (@char >= '0' and @char <= '9') or (@char >= 'A' and @char <= 'Z') or (@char >= 'a' and @char <= 'z') select @ls = @ls + @char
		select @pos = @pos + 1
	end
	return lower(@ls)
end


GO
GRANT EXECUTE ON [dbo].[f_Gesaeubert] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_Gesaeubert] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_gID4aID]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[f_gID4aID] (@aID int)  
RETURNS int AS  
BEGIN 

return (select wkGebietsKz from wasserkoerper join abschnitt on wkID = aWasserkoerper where aID = @aID)

END


GO
GRANT EXECUTE ON [dbo].[f_gID4aID] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_gID4aID] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_Index4Note]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[f_Index4Note] (@note float)  
RETURNS int AS  
BEGIN 
/*
	2014-02-28	klopfer: "nicht bewertbar" (Note 0) wird als Index 6 ausgegeben
	*/
declare @i int
if (@note is null) return null

select @i = 	case when @note between 3.76 and 5. then 1 else
		case when @note between 2.51 and 3.75 then 2 else
		case when @note between 2.01 and 2.5 then 3 else
		case when @note between 1.51 and 2. then 4 else
		case when @note between 0.01 and 1.5 then 5 else 6
		end end end end end
return @i

END


GO
GRANT EXECUTE ON [dbo].[f_Index4Note] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_Index4Note] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_kDaten4kID]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[f_kDaten4kID] (@kID int)
RETURNS varchar(80) AS  
BEGIN 
declare @ls varchar(80)
select @ls = kDaten from katalog where kID = @kID
--
return @ls
--
END


GO
GRANT EXECUTE ON [dbo].[f_kDaten4kID] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_kDaten4kID] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_kID4kDaten]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[f_kID4kDaten] (@kDaten varchar(80), @kKatalogart varchar(20))
RETURNS int AS  
BEGIN 
declare @ret int
select @ret = kID from katalog where ltrim(rtrim(upper(kDaten))) = ltrim(rtrim(upper(@kDaten))) and ltrim(rtrim(upper(kKatalogart))) = ltrim(rtrim(upper(@kKatalogart)))
--
return @ret
--
END


GO
GRANT EXECUTE ON [dbo].[f_kID4kDaten] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_kID4kDaten] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_Leitreferenz4Index]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[f_Leitreferenz4Index] (@aID int, @ix int)  
RETURNS int AS  
BEGIN 

return (select rID from dbo.ft_Leitreferenzen4aID(@aID) where ix = @ix)

END


GO
GRANT EXECUTE ON [dbo].[f_Leitreferenz4Index] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_Leitreferenz4Index] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_Praedikat4Index]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[f_Praedikat4Index] (@index int)  
RETURNS varchar(20) AS  
BEGIN 

declare @s varchar(20)
if (@index is null) return null

select @s = kDaten from katalog where kKatalogart = 'bewpraed' and kOrdnung = @index
return @s

END


GO
GRANT EXECUTE ON [dbo].[f_Praedikat4Index] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_Praedikat4Index] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_Praedikat4Note]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[f_Praedikat4Note] (@note float)  
/*
	2013-04-05	klopfer: rundet auf decimal(4,2) - sonst werden Grenzwerte nicht gruppiert
	2013-04-08	klopfer: konvertiert erst zu decimal und rundet dann
	2014-02-27	klopfer: 'nicht bewertbar' eingeführt (mit Wert 0)
	*/
RETURNS varchar(20) AS  
BEGIN 

declare @s varchar(20)
declare @rnote decimal(4, 2)
if (@note is null) return null

select @rnote = cast(round(cast(@note as decimal(5,3)), 2) as decimal(4, 2))
select @s = 	
		case when @rnote between 3.76 and 5. then 'sehr gut' else
		case when @rnote between 2.51 and 3.75 then 'gut' else
		case when @rnote between 2.01 and 2.5 then 'mäßig' else
		case when @rnote between 1.51 and 2. then 'unbefriedigend' else
		case when @rnote between 0.01 and 1.5 then 'schlecht' else 'nicht bewertbar'
		end end end end end
return @s

END


GO
GRANT EXECUTE ON [dbo].[f_Praedikat4Note] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_Praedikat4Note] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_Probestellen4bID]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[f_Probestellen4bID] (@bID int, @sep varchar(10) = null)
/*
	2015-12-01	Klopfer: @psNr vc50
	2019-07-08	Klopfer: psNummer
	*/
RETURNS varchar(255) AS  
BEGIN 
--
declare @ls varchar(255), @psNr varchar(50)
declare @ct int
select @ls = ''
if (isnull(@sep, '') = '') begin
  select @ct = count(ps2bID) from ps2b where ps2bBewertung = @bID
  select @psNr = min(psNummer) from probestelle join ps2b on psID = ps2bProbestelle where ps2bBewertung = @bID
  select @ls = @psNr
  if (@ct > 1) select @ls = @ls + ' u.a.'
end
else
  select @ls = @ls + psNummer + @sep from probestelle join ps2b on psID = ps2bProbestelle where ps2bBewertung = @bID
--
return @ls
--
END


GO
GRANT EXECUTE ON [dbo].[f_Probestellen4bID] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_Probestellen4bID] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_Probestellen4wkUndJahr]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[f_Probestellen4wkUndJahr] (@wkID int, @jahr int, @sep varchar(10))
/*
	2015-12-01 Klopfer:	@psNr auf vc50
	*/
RETURNS varchar(4000) AS
BEGIN 
/* Auflistung der Probestellen, die bei den Bewertungen des wk im jahr untersucht wurden
	2014-03-23	klopfer: erstellt
	2019-07-08	klopfer: psNummer
	*/
declare @ls varchar(4000), @psNr varchar(50)
declare @ct int
if (@sep is null) select @sep = ', '

select @ls = ''
select @ls = @ls + psNummer + @sep
from probestelle join ps2b on psID = ps2bProbestelle join bewertung on ps2bBewertung = bID join abschnitt on bAbschnitt = aID 
where aWasserkoerper = @wkID and datepart(yy, bDatum) = @jahr
--
if (len(@ls) > len(@sep)) select @ls = left(@ls, len(@ls) - len(@sep)) 
return @ls
--
END


GO
GRANT EXECUTE ON [dbo].[f_Probestellen4wkUndJahr] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_Probestellen4wkUndJahr] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_psFangzahl]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[f_psFangzahl] (@psID int)  
RETURNS int AS  
BEGIN 

declare @ret int

if (dbo.f_psMitFPW(@psID) = 1)
  select @ret = count(fpwID) from fangprot_wiss where fpwProbestelle = @psID
else
  select @ret = sum(fpAnz_ges) from fangprot where fpProbestelle = @psID

return @ret
END


GO
GRANT EXECUTE ON [dbo].[f_psFangzahl] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_psFangzahl] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_psGattung]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[f_psGattung] (@psID int)  
RETURNS char(1) AS  
BEGIN 

declare @ret char(1)

select @ret = isnull(psGattung, 'F') from probestelle where psID = @psID
return isnull(@ret, 'F')

END


GO
GRANT EXECUTE ON [dbo].[f_psGattung] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_psGattung] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_psMitFPW]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[f_psMitFPW] (@psID int)  
RETURNS int AS  
BEGIN 

declare @ret int
select @ret = 0
if exists(select fpwID from fangprot_wiss where fpwProbestelle = @psID) select @ret = 1

return @ret

END


GO
GRANT EXECUTE ON [dbo].[f_psMitFPW] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_psMitFPW] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_psMultigroup]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create FUNCTION [dbo].[f_psMultigroup] (@psID int, @fID int)  
RETURNS int AS
/* liefert 1, wenn im Fangprotokoll bei der Probestelle @psID bei der Fischart @fID
	Vertreter mehrerer Größenklassen existieren; sonst 0
	2012-12-28	klopfer: erstellt
	*/
BEGIN 

declare @ret int
declare @ct int

Select @ct = Count(*) From fangprot
Where fpProbestelle = @psID And fpFischart = @fID
	And IsNull(fpAnz_0_2, 0) <> IsNull(fpAnz_ges, 0) 
	And IsNull(fpAnz_1_4, 0) <> IsNull(fpAnz_ges, 0) 
	And IsNull(fpAnz_5_9, 0) <> IsNull(fpAnz_ges, 0)
	And IsNull(fpAnz_5_9, 0) <> IsNull(fpAnz_ges, 0)
	And IsNull(fpAnz_10_14, 0) <> IsNull(fpAnz_ges, 0)
	And IsNull(fpAnz_15_19, 0) <> IsNull(fpAnz_ges, 0)
	And IsNull(fpAnz_20_24, 0) <> IsNull(fpAnz_ges, 0)
	And IsNull(fpAnz_25_29, 0) <> IsNull(fpAnz_ges, 0)
	And IsNull(fpAnz_30_39, 0) <> IsNull(fpAnz_ges, 0)
	And IsNull(fpAnz_40_49, 0) <> IsNull(fpAnz_ges, 0)
	And IsNull(fpAnz_50_59, 0) <> IsNull(fpAnz_ges, 0)
	And IsNull(fpAnz_60_69, 0) <> IsNull(fpAnz_ges, 0)
	And IsNull(fpAnz_70_n, 0) <> IsNull(fpAnz_ges, 0)

return case when (@ct > 0) then 1 else 0 end
END


GO
GRANT EXECUTE ON [dbo].[f_psMultigroup] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_psMultigroup] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_psNummer]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE function [dbo].[f_psNummer] (@psID int)
returns varchar(30)
as
/* liefert die Probestellennummer (ab 2019) zur @psID
	select psID, dbo.f_psNummer(psID) as psNummer from probestelle

	2019-05-31	klopfer: erstellt
	2019-07-01	klopfer: mit dbo.f_Einzugsgebiet
*/
begin
	return 
	(select left(
		CONVERT(varchar(10), psDatum, 120) + '_PST_' 
		+ dbo.f_Einzugsgebiet(psGebiets_kz)
		+ '_' + dbo.f_0filled(CAST(psLfdnr as varchar), 3)
		, 30)
	from probestelle left outer join gebiets_kz on psGebiets_kz = gID
	where psID = @psID)
end
GO
GRANT EXECUTE ON [dbo].[f_psNummer] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_psNummer] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_rKuerzel4rBezeichnung]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[f_rKuerzel4rBezeichnung] (@rBezeichnung varchar(80))  
RETURNS varchar(10) AS  
BEGIN 

return (select case when isnull(rKuerzel, '') = '' then left(rBezeichnung, 10) else rKuerzel end from referenz where ltrim(rtrim(upper(rBezeichnung))) = ltrim(rtrim(upper(@rBezeichnung))))

END


GO
GRANT EXECUTE ON [dbo].[f_rKuerzel4rBezeichnung] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_rKuerzel4rBezeichnung] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_rKuerzel4rID]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[f_rKuerzel4rID] (@rID int)  
RETURNS varchar(10) AS  
BEGIN 

return (select case when isnull(rKuerzel, '') = '' then left(rBezeichnung, 10) else rKuerzel end from referenz where rID = @rID )

END


GO
GRANT EXECUTE ON [dbo].[f_rKuerzel4rID] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_rKuerzel4rID] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_Strecke4bID]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[f_Strecke4bID] (@bID int)  
RETURNS float AS  
BEGIN 
--
return (select sum(psGwStrecke_eff) from probestelle join ps2b on psID = ps2bProbestelle where ps2bBewertung = @bID)
--
END


GO
GRANT EXECUTE ON [dbo].[f_Strecke4bID] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_Strecke4bID] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_UTMKoordinaten]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[f_UTMKoordinaten] (@nID int)  
RETURNS int AS  
/*
	2018-10-23	Klopfer: immer UTM; Benutzereinstellung wurde entfernt
	*/
BEGIN 

return 1 -- case when (select left(zveTextWert, 1) from zv_einstellung where zveEinstellungstyp = 1141 and zveBenutzer = @nID) = '1' then 1 else 0 end

END


GO
GRANT EXECUTE ON [dbo].[f_UTMKoordinaten] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_UTMKoordinaten] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_Wasserkoerper]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[f_Wasserkoerper] (@wkID int)  
RETURNS varchar(255) AS  
BEGIN 

return (select isnull(wkBezeichnung, '') + case when isnull(wkNummer, '') <> '' then ' (' + wkNummer + ')' else '' end from wasserkoerper where wkID = @wkID)
--
END


GO
GRANT EXECUTE ON [dbo].[f_Wasserkoerper] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_Wasserkoerper] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_wkID4bID]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE FUNCTION [dbo].[f_wkID4bID] (@bID int)  
RETURNS int AS  
BEGIN 

return (select aWasserkoerper from abschnitt join bewertung on aID = bAbschnitt where bID = @bID)
END


GO
GRANT EXECUTE ON [dbo].[f_wkID4bID] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_wkID4bID] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_wkNummer4gID]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[f_wkNummer4gID] (@gID int)
RETURNS varchar(1000) AS
/* liefert eine Komma-getrennte Aufzählung der OWK-IDs aller zum Gewässer @gID gehörigen OWK
	2014-03-21	klopfer: erstellt
	*/
BEGIN 

if (isnull(@gID, -1) = -1) return ''
declare @ret varchar(1000), @len int
--
select @ret = ''
select @ret = @ret + ', ' + isnull(wkNummer, '')
FROM wasserkoerper
WHERE wkGebietsKz = @gID
order by wkNummer
--
select @len = len(@ret)
if (@len > 2) select @ret = right(@ret, @len - 2)
--
return @ret 
END


GO
GRANT EXECUTE ON [dbo].[f_wkNummer4gID] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_wkNummer4gID] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_zveIntWert]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[f_zveIntWert] (@zvetGruppe nvarchar(80), @zvetBezeichnung nvarchar(255))
/*
	2017-11-27	Klopfer: sichert gegen NULL ab
	*/
RETURNS int AS  
BEGIN 
return isnull((
select zveIntWert from dbo.zv_einstellung join dbo.zv_einstellungstyp on zveEinstellungstyp = zvetID
where lower(zvetGruppe) = rtrim(ltrim(lower(@zvetGruppe))) and lower(zvetBezeichnung) = rtrim(ltrim(lower(@zvetBezeichnung)))
	and isnull(zveMandant, 0) = dbo.f_aktMandant()
), 0)
end
GO
GRANT EXECUTE ON [dbo].[f_zveIntWert] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_zveIntWert] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[f_zvrLoeschbar]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
create FUNCTION [dbo].[f_zvrLoeschbar] (@zvrID int)  
RETURNS varchar(255) AS  
BEGIN 
  declare @ret varchar(255)

  select @ret = 
  case when exists(select 1 from zv_benutzer where zvbRolle = @zvrID) then '10' + char(9) + 'Diese Rolle ist mindestens einem Benutzer zugeordnet.'
  end
  if (isnull(@ret, '') = '') select @ret = '0' + char(9) + 'Die Rolle kann gelöscht werden.'

  return @ret

END


GO
GRANT EXECUTE ON [dbo].[f_zvrLoeschbar] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[f_zvrLoeschbar] TO public AS [dbo]
GO
/****** Object:  UserDefinedFunction [dbo].[ft_Leitreferenzen4aID]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[ft_Leitreferenzen4aID] (@aID int)  
RETURNS @lr table (ix int identity, rID int not null)
 AS  
BEGIN 

insert into @lr (rID)
select rID
from referenz join referenzwert on rID = rwReferenz
where rwAbschnitt = @aID and isnull(rwBetrag, 0.) >= 5.
order by rBezeichnung

return
END


GO
/****** Object:  UserDefinedFunction [dbo].[f_HOST_NAME]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


CREATE function [dbo].[f_HOST_NAME] () 
returns nvarchar(40) with schemabinding
begin
	return HOST_NAME()
end
GO
/****** Object:  View [dbo].[vGesamtbewertung]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE view [dbo].[vGesamtbewertung] as
/* aggregierte Bewertung der Wasserkörper, gruppiert nach Jahren der Bewertung
	2014-03-23	klopfer: erstellt
	*/
select 
	MAX(wkID) gbWasserkoerper
	, DATEPART(yy, b.bDatum) gbJahr
	, Max(b.bDatum) gbDatum
	, MIN(b.bDatum) gbVon
	, MAX(b.bDatum) gbBis
	, cast(case when convert(varchar, MIN(b.bDatum), 104) = convert(varchar, MAX(b.bDatum), 104) then CONVERT(varchar, max(b.bDatum), 104) else CONVERT(varchar, MIN(b.bDatum), 104) + ' - ' + CONVERT(varchar, max(b.bDatum), 104) end as varchar(25)) as gbVonBis
	, isnull((
		select avg(bNote) 
		from dbo.bewertung bi join abschnitt ai on bi.bAbschnitt = ai.aID 
		where ai.aWasserkoerper = a.aWasserkoerper and datepart(yy, bi.bDatum) = datepart(yy, b.bDatum) and ISNULL(bi.bNote, 0.) > 0.), 0) gbNote
	, dbo.f_kID4kDaten(dbo.f_Praedikat4Note(
		isnull((
		select avg(bNote) 
		from dbo.bewertung bi join abschnitt ai on bi.bAbschnitt = ai.aID 
		where ai.aWasserkoerper = a.aWasserkoerper and datepart(yy, bi.bDatum) = datepart(yy, b.bDatum) and ISNULL(bi.bNote, 0.) > 0.), 0)
		), 'bewpraed' ) gbPraedikat
from bewertung b
	join abschnitt a on b.bAbschnitt = a.aID 
	join wasserkoerper wk on a.aWasserkoerper = wk.wkID
	join gebiets_kz g on wk.wkGebietsKz = g.gID
group by a.aWasserkoerper, DATEPART(yy, b.bDatum)
GO
GRANT SELECT ON [dbo].[vGesamtbewertung] TO public AS [dbo]
GO
GRANT SELECT ON [dbo].[vGesamtbewertung] TO public AS [dbo]
GO
/****** Object:  View [GDV].[Art]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO




CREATE view [GDV].[Art]
as
select
	Bezeichnung
	, Gefaehrdung as Gefährdung
	, Stueckzahl as Stückzahl
	, AID
	, LID
from GDT.Art
	join dbo.zv_benutzer on _Kontext = zvbID and isnull(zvbComputername2, isnull(zvbComputername, '')) = HOST_NAME()
where ISNULL(LID, 0) <> 0
GO
GRANT SELECT ON [GDV].[Art] TO public AS [dbo]
GO
GRANT SELECT ON [GDV].[Art] TO public AS [dbo]
GO
GRANT SELECT ON [GDV].[Art] TO [public] AS [dbo]
GO
/****** Object:  View [GDV].[ArtGesamt]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO





CREATE view [GDV].[ArtGesamt]
as
select
	Bezeichnung
	, Gefaehrdung as Gefährdung
	, Stueckzahl as Stückzahl
	, AID
from GDT.Art join dbo.zv_benutzer on _Kontext = zvbID and isnull(zvbComputername2, isnull(zvbComputername, '')) = HOST_NAME()
where isnull(LID, 0) = 0

GO
GRANT SELECT ON [GDV].[ArtGesamt] TO public AS [dbo]
GO
GRANT SELECT ON [GDV].[ArtGesamt] TO public AS [dbo]
GO
GRANT SELECT ON [GDV].[ArtGesamt] TO [public] AS [dbo]
GO
/****** Object:  View [GDV].[Lokation]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO



CREATE view [GDV].[Lokation] with schemabinding
as
select 
	X
	, Y
	, LID
from GDT.Lokation join dbo.zv_benutzer on _Kontext = zvbID and isnull(zvbComputername2, isnull(zvbComputername, '')) = HOST_NAME()

GO
GRANT SELECT ON [GDV].[Lokation] TO public AS [dbo]
GO
GRANT SELECT ON [GDV].[Lokation] TO public AS [dbo]
GO
GRANT SELECT ON [GDV].[Lokation] TO [public] AS [dbo]
GO
/****** Object:  View [GDV].[Probestelle]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO






CREATE view [GDV].[Probestelle]
as
select
	Befischungsdatum
	, Befischungsjahr
	, Probestrecke
	, GesamtmasseProHa
	, Fischereiregion
	, oekologischerWert as ökologischerWert
	, Fischereiausuebender as Fischereiausübender
	, GEWKZ
	, OWKName
	, OWKID
	, Bewertungspraedikat as Bewertungsprädikat
	, Bewertungsnote
	, Befischungsanlass
	, Fangquote
	, befischteStrecke
	, Befischungsrichtung
	, Landkreis
	, Gemeinde
	, Bilddatei
	, Bemerkung
	, PSID
	, LID
from GDT.Probestelle join dbo.zv_benutzer on _Kontext = zvbID and isnull(zvbComputername2, isnull(zvbComputername, '')) = HOST_NAME()

GO
GRANT SELECT ON [GDV].[Probestelle] TO public AS [dbo]
GO
GRANT SELECT ON [GDV].[Probestelle] TO public AS [dbo]
GO
GRANT SELECT ON [GDV].[Probestelle] TO [public] AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[__searchSyscomments]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE proc [dbo].[__searchSyscomments] (@Muster varchar(255)) as
/*
	2017-07-11	Klopfer: case-insensitiv
	*/
select distinct name 
from sys.objects o, sys.sql_modules m
where o.object_id = m.object_id
  and lower(m.definition) like '%' + lower(@Muster) + '%'


GO
GRANT EXECUTE ON [dbo].[__searchSyscomments] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[__searchSyscomments] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[_exec]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE proc [dbo].[_exec] (@sql text, @maxrows int = 0) as
/* führt @sql nur dann endgültig aus, wenn höchstens @maxrows zeilen betroffen sind
  2010-09-09	klopfer: erstellt
  2012-12-02	klopfer: keine Transaktion, wenn @maxrows = 0 (Laufzeitprobleme umgehen)
  */
declare @ct int
select @ct = -1

if (@maxrows = 0)
	exec (@sql)
else begin
	begin tran
	exec (@sql)
	select @ct = @@rowcount
	if (@maxrows > 0) and (@ct > @maxrows) begin
		rollback tran
	end
	else begin
		commit tran
		select @ct = -1
	end
end	
select @ct


GO
GRANT EXECUTE ON [dbo].[_exec] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[_exec] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[_obs_lst_ps2a]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[_obs_lst_ps2a] (
	@nID int,
	@aID int,
	@ab varchar(20)
)
AS
/* history:
  2007-04-05	klopfer: nun mit arg @ab
  2007-04-13	klopfer: arg @aID statt @wkID
  2019-07-01	klopfer: psNummer
*/
declare @zvkxListe1 varchar(1000)
declare @sql varchar(2000)
--
select @zvkxListe1 = zvkxListe1 from zv_kontextX where zvkxBenutzer = @nID and lower(zvkxTyp) = 'anlaesse'
if isnull(@zvkxListe1, '') = '' select @zvkxListe1 = '-1' 
select @sql = '
  SELECT ''T'' checked,   
         psNummer,   
         gGewaesser,   
         psProbestrecke,   
         gemKREIS_1_99,   
         gemGEM_1_99,   
         psID  
    FROM 
	probestelle
	join gem_1_99 on psGEM_1_99 = gemID
	join gebiets_kz on psGebiets_kz = gID
   WHERE
        psAbschnitt = ' + str(@aID) + ' and psBetreff in (' + @zvkxListe1 + ') and psDatum >= convert(datetime, ''' + @ab + ''', 104)
ORDER BY psProbestellennr
'
--
exec(@sql)
--


GO
GRANT EXECUTE ON [dbo].[_obs_lst_ps2a] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[_obs_lst_ps2a] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[_obs_lst_ps2wk]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE  PROCEDURE [dbo].[_obs_lst_ps2wk] (
	@nID int,
	@wkID int
)
AS
--
declare @zvkxListe1 varchar(1000)
declare @sql varchar(2000)
--
select @zvkxListe1 = zvkxListe1 from zv_kontextX where zvkxBenutzer = @nID and lower(zvkxTyp) = 'anlaesse'
if isnull(@zvkxListe1, '') = '' select @zvkxListe1 = '-1' 
select @sql = '
  SELECT ''T'' checked,   
         probestelle.psProbestellennr,   
         gebiets_kz.gGewaesser,   
         probestelle.psProbestrecke,   
         gemeinde.gemKreis,   
         gemeinde.gemGemeinde,   
         probestelle.psID  
    FROM 
	probestelle
	join gemeinde on psGemeinde = gemID
	join gebiets_kz on psGebiets_kz = gID
   WHERE
        psWasserkoerper = ' + str(@wkID) + ' and psBetreff in (' + @zvkxListe1 + ')
ORDER BY probestelle.psProbestellennr
'
--
exec(@sql)
--


GO
GRANT EXECUTE ON [dbo].[_obs_lst_ps2wk] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[_obs_lst_ps2wk] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[akt_AbschnittBestimmen]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[akt_AbschnittBestimmen] (@wkNummer varchar(20), @RefID int, @von varchar(80), @bis varchar(80)) AS
/* versucht anhand der args einen abschnitt zu bestimmen; wenn nicht vorhanden, wird einer angelegt
  2007-04-14	klopfer: erstellt
  2007-04-25	klopfer: erkennt nun auch vorhandene wks mit Abschnitt "Gesamter WK" als ungeteilt, falls der wk ohne Abschnittsbezeichnung geliefert wird
  2010-01-07ff.	klopfer: legt keinen Abschnitt mehr automatisch an; schneidet ggf. 'Brücke bei' und 'Zufluss bei' vor dem Vergleich heraus
  2010-03-01	klopfer: ordnet nun vorrangig anhand RefID/aOrdnung zu  
*/
declare @wkID int, @aID int, @aOrdnung int
declare @aBezeichnung varchar(80), @s varchar(255)
select @aBezeichnung = ltrim(rtrim(isnull(@von, ''))) + case when ltrim(rtrim(isnull(@bis, ''))) <> '' then ' bis ' + ltrim(rtrim(@bis)) else '' end

select @wkID = wkID from wasserkoerper where ltrim(rtrim(upper(wkNummer))) = ltrim(rtrim(upper(@wkNummer)))
if (isnull(@wkID, 0) = 0) goto Abgang

if (@RefID = 2)
	select @aID = min(aID) from abschnitt where aWasserkoerper = @wkID and aOrdnung is not null and isnull(aOrdnung, 0) = 2
else
	select @aID = min(aID) from abschnitt where aWasserkoerper = @wkID and aOrdnung is not null and isnull(aOrdnung, 0) in (0, 1)
if (isnull(@aID, 0) <> 0) goto Abgang

select @aID = min(aID) from abschnitt where aWasserkoerper = @wkID and aOrdnung is null and upper(ltrim(rtrim(isnull(aBezeichnung, '')))) = upper(@aBezeichnung)
if (isnull(@aID, 0) <> 0) goto aOrdnungSpeichern

select @s = replace( replace(@aBezeichnung, 'Brücke bei ', ''), 'Zufluss bei ', '')
select @aID = min(aID) from abschnitt where aWasserkoerper = @wkID and aOrdnung is null and upper(ltrim(rtrim(isnull(aBezeichnung, '')))) = upper(@s)
if (isnull(@aID, 0) <> 0) goto aOrdnungSpeichern

if (isnull(@aID, 0) = 0) and (upper(@aBezeichnung) in ('', upper('Gesamter WK'))) begin
  select @aID = min(aID) from abschnitt where aWasserkoerper = @wkID and aOrdnung is null and upper(ltrim(rtrim(isnull(aBezeichnung, '')))) in ('', upper('Gesamter WK'))
end
if (isnull(@aID, 0) = 0) goto Abgang
--
aOrdnungSpeichern:
if (@RefID = 2) begin
	select @aOrdnung = 2
end
else begin
	if ((select COUNT(*) from abschnitt where aWasserkoerper = @wkID) > 1)
		select @aOrdnung = 1
	else
		select @aOrdnung = 0
end
update abschnitt set aOrdnung = @aOrdnung where aID = @aID
--
Abgang:
select @aID
--


GO
GRANT EXECUTE ON [dbo].[akt_AbschnittBestimmen] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[akt_AbschnittBestimmen] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[akt_bGruppieren]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[akt_bGruppieren] (@bID int, @Bewertungsdauer int) AS
/* fuegt die Bewertung @bID anhand ihrer wk-Zugehoerigkeit und des Datums in eine bestehende gesamtbewertung ein oder bildet eine neue gesamtbewertung
  2008-10-01	klopfer: erstellt
  2014-02-27	klopfer: schließt nicht bewertbare Abschnitte von der Mittelung aus
  2014-03-20	klopfer: nun mit akt_gbAktualisieren; löscht verwaiste gb
*/
declare @gbID int
--
select @gbID = gbID 
from dbo.gesamtbewertung, dbo.bewertung join dbo.abschnitt on bAbschnitt = aID 
where bID = @bID and gbWasserkoerper = aWasserkoerper and abs(datediff(day, gbDatum, bDatum)) < @Bewertungsdauer

if (@gbID is null) begin
	begin tran
	insert into dbo.gesamtbewertung (gbWasserkoerper, gbDatum, gbNote, gbPraedikat) 
	select aWasserkoerper, bDatum, bNote, bPraedikat from dbo.bewertung join dbo.abschnitt on bAbschnitt = aID where bID = @bID
	
	select @gbID = max(gbID) from dbo.gesamtbewertung
	update dbo.bewertung set bGesamtbewertung = @gbID where bID = @bID
	commit tran
end
else begin
	update dbo.bewertung set bGesamtbewertung = @gbID where bID = @bID
	exec dbo.akt_gbAktualisieren @gbID 
end

delete from gesamtbewertung where not exists(select 1 from bewertung where bGesamtbewertung = gbID)


GO
GRANT EXECUTE ON [dbo].[akt_bGruppieren] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[akt_bGruppieren] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[akt_bLoeschen]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[akt_bLoeschen] (@bID int) AS
/*
  2008-10-04	klopfer: erstellt
  2013-04-05	klopfer: berechnet das Datum der gb neu
  2014-03-20	klopfer: nun mit akt_gbAktualisieren; löscht zuerst die Bewertung und berechnet dann gb neu
*/

declare @gbID int
--
select @gbID = bGesamtbewertung from dbo.bewertung where bID = @bID
--
-- Bewertung löschen:
delete from dbo.wert where wBewertung = @bID
delete from dbo.ps2b where ps2bBewertung = @bID
delete from dbo.bewertung where bID = @bID
--
-- Gesamtbewertung ohne den zu löschenden neu berechnen oder ggf. entfernen:
if not exists(select 1 from dbo.bewertung where bGesamtbewertung = @gbID) begin
	delete from dbo.gesamtbewertung where gbID = @gbID
end
else
	exec dbo.akt_gbAktualisieren @gbID
--


GO
GRANT EXECUTE ON [dbo].[akt_bLoeschen] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[akt_bLoeschen] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[akt_dmGarantieren]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[akt_dmGarantieren] (@bID int) AS
/* history:
  2009-03-09	klopfer: erstellt
*/

insert into dbo.dummy (dmBewertung, dmReferenz, dmOn)
select @bID, rID, 'F'
from dbo.referenz
where not exists(select 1 from dbo.dummy where dmBewertung = @bID and dmReferenz = rID)


GO
GRANT EXECUTE ON [dbo].[akt_dmGarantieren] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[akt_dmGarantieren] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[akt_fpHochrechnung]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[akt_fpHochrechnung] (@fpID int) AS
/*
  erstellt / aktualisiert eine Hochrechnung für den Fangprotokoll-Eintrag fpID
  - Hochrechnungen sind durch fpHochrechnung = 'T' deklariert
  - in fpIDUrwerte wird der zugeordnete Datensatz der Urwerte adressiert
  - die zugeordnete Probestelle steht negativ in fpProbestelle
 */
BEGIN
SET NOCOUNT ON;

declare @psID int, @fpIDHR int
select @psID = fpProbestelle from fangprot where fpID = @fpID
--
-- Datensatz für Hochrechnung einfügen (zuvor wurden alle gelöscht):
insert into fangprot (
	[fpProbestelle]
	, [fpFischart]
	, fpHochgerechnet
	, fpIDUrwerte
	, [UPD_TIME]
	, [UPD_USER]
)
select
	- [fpProbestelle]
	, [fpFischart]
	, 'T'
	, @fpID
	, GETDATE()
	, SUSER_SNAME()
from fangprot where fpID = @fpID
--
select @fpIDHR = fpID from fangprot where ISNULL(fpHochgerechnet, 'F') = 'T' and fpIDUrwerte = @fpID
--
-- Hochrechnung ausführen:
-- alle Werte liegen als int vor; mindestens ein Operand muss nach decimal konvertiert werden, sonst wird nicht gerundet, sondern
-- ganzzahlig dividiert, also immer abgeschnitten:
update fangprot set
	[fpAnz_0_2] = fpUR.fpAnz_0_2 + ROUND((cast(isnull(fpUR.fpAnz_zusatz, 0) as decimal) * fpUR.fpAnz_0_2) / fpUR.fpAnz_ges, 0)
	, [fpAnz_1_4] = fpUR.fpAnz_1_4 + ROUND((cast(isnull(fpUR.fpAnz_zusatz, 0) as decimal) * fpUR.fpAnz_1_4) / fpUR.fpAnz_ges, 0)
	, [fpAnz_5_9] = fpUR.fpAnz_5_9 + ROUND((cast(isnull(fpUR.fpAnz_zusatz, 0) as decimal) * fpUR.fpAnz_5_9) / fpUR.fpAnz_ges, 0)
	, [fpAnz_10_14] = fpUR.fpAnz_10_14 + ROUND((cast(isnull(fpUR.fpAnz_zusatz, 0) as decimal) * fpUR.fpAnz_10_14) / fpUR.fpAnz_ges, 0)
	, [fpAnz_15_19] = fpUR.fpAnz_15_19 + ROUND((cast(isnull(fpUR.fpAnz_zusatz, 0) as decimal) * fpUR.fpAnz_15_19) / fpUR.fpAnz_ges, 0)
	, [fpAnz_20_24] = fpUR.fpAnz_20_24 + ROUND((cast(isnull(fpUR.fpAnz_zusatz, 0) as decimal) * fpUR.fpAnz_20_24) / fpUR.fpAnz_ges, 0)
	, [fpAnz_25_29] = fpUR.fpAnz_25_29 + ROUND((cast(isnull(fpUR.fpAnz_zusatz, 0) as decimal) * fpUR.fpAnz_25_29) / fpUR.fpAnz_ges, 0)
	, [fpAnz_30_39] = fpUR.fpAnz_30_39 + ROUND((cast(isnull(fpUR.fpAnz_zusatz, 0) as decimal) * fpUR.fpAnz_30_39) / fpUR.fpAnz_ges, 0)
	, [fpAnz_40_49] = fpUR.fpAnz_40_49 + ROUND((cast(isnull(fpUR.fpAnz_zusatz, 0) as decimal) * fpUR.fpAnz_40_49) / fpUR.fpAnz_ges, 0)
	, [fpAnz_50_59] = fpUR.fpAnz_50_59 + ROUND((cast(isnull(fpUR.fpAnz_zusatz, 0) as decimal) * fpUR.fpAnz_50_59) / fpUR.fpAnz_ges, 0)
	, [fpAnz_60_69] = fpUR.fpAnz_60_69 + ROUND((cast(isnull(fpUR.fpAnz_zusatz, 0) as decimal) * fpUR.fpAnz_60_69) / fpUR.fpAnz_ges, 0)
	, [fpAnz_70_n] = fpUR.fpAnz_70_n + ROUND((cast(isnull(fpUR.fpAnz_zusatz, 0) as decimal) * fpUR.fpAnz_70_n) / fpUR.fpAnz_ges, 0)
	, [fpWeibchen] = fpUR.fpWeibchen + ROUND((cast(isnull(fpUR.fpAnz_zusatz, 0) as decimal) * fpUR.fpWeibchen) / fpUR.fpAnz_ges, 0)
	, [fpGewicht_ges] = fpUR.fpGewicht_ges + ROUND((cast(isnull(fpUR.fpAnz_zusatz, 0) as decimal) * fpUR.fpGewicht_ges) / fpUR.fpAnz_ges, 0)
	, [fpGewicht_max] = fpUR.fpGewicht_max + ROUND((cast(isnull(fpUR.fpAnz_zusatz, 0) as decimal) * fpUR.fpGewicht_max) / fpUR.fpAnz_ges, 0)
	
	, [fpAnz_zusatz] = fpUR.fpAnz_zusatz
	, UPD_TIME = GETDATE()
	, UPD_USER = SUSER_SNAME()
from fangprot, fangprot fpUR
where fpUR.fpID = @fpID and fangprot.fpID = @fpIDHR and ISNULL(fpUR.fpAnz_ges, 0) > 0
-- die neue Gesamtanzahl muss wegen der Rundungsdifferenzen neu kumuliert werden (im Frontend)
--
END


GO
GRANT EXECUTE ON [dbo].[akt_fpHochrechnung] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[akt_fpHochrechnung] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[akt_gbAktualisieren]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE proc [dbo].[akt_gbAktualisieren] (@gbID int) as
/* berechnet die Gesamtbewertung neu
	2014-03-20	klopfer: erstellt
	*/

update dbo.gesamtbewertung set gbNote = isnull((select avg(bNote) from dbo.bewertung where bGesamtbewertung = @gbID and ISNULL(bNote, 0.) > 0.), 0) where gbID = @gbID
update dbo.gesamtbewertung set gbPraedikat = dbo.f_kID4kDaten( dbo.f_Praedikat4Note(gbNote), 'bewpraed' ) where gbID = @gbID
update dbo.gesamtbewertung set gbDatum = (select MAX(bDatum) from dbo.bewertung where bGesamtbewertung = gbID) where gbID = @gbID


GO
GRANT EXECUTE ON [dbo].[akt_gbAktualisieren] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[akt_gbAktualisieren] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[akt_nachImport2FK]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
--
CREATE   PROCEDURE [dbo].[akt_nachImport2FK] (@QHost int) AS
/* nur fuer Hauptdaten
  2006-09-26	klopfer: erstellt
  2013-06-13	ergänzt
*/

-- Referenzen innerhalb der importierten Daten auf das Ziel umschluesseln:
/*
-- von bewertung:
update ps2b set ps2bBewertung = bID from bewertung where ps2bImportiert = 'T' and ps2bBewertung = bHostID and bHost = @QHost
update dummy set dmBewertung = bID from bewertung where dmImportiert = 'T' and dmBewertung = bHostID and bHost = @QHost
update wert set wBewertung = bID from bewertung where wImportiert = 'T' and wBewertung = bHostID and bHost = @QHost

-- von gesamtbewertung:
update bewertung set bGesamtbewertung = gbID from gesamtbewertung where bImportiert = 'T' and bGesamtbewertung = gbHostID and gbHost = @QHost
*/

-- von probestelle:
update fangprot set fpProbestelle = psID from probestelle where fpImportiert = 'T' and fpProbestelle = psHostID and psHost = @QHost
update fangprot_wiss set fpwProbestelle = psID from probestelle where fpwImportiert = 'T' and fpwProbestelle = psHostID and psHost = @QHost
update k2ps_msel set k2ps_mselProbestelle = psID from probestelle where k2ps_mselImportiert = 'T' and k2ps_mselProbestelle = psHostID and psHost = @QHost
--update ps2b set ps2bProbestelle = psID from probestelle where ps2bImportiert = 'T' and ps2bProbestelle = psHostID and psHost = @QHost
--
-- Hauptdaten:
--update bewertung set bImportiert = 'F'
--update dummy set dmImportiert = 'F'
update fangprot set fpImportiert = 'F'
update fangprot_wiss set fpwImportiert = 'F'
--update gesamtbewertung set gbImportiert = 'F'
update k2ps_msel set k2ps_mselImportiert = 'F'
update probestelle set psImportiert = 'F'
--update ps2b set ps2bImportiert = 'F'
--update wert set wImportiert = 'F'


GO
GRANT EXECUTE ON [dbo].[akt_nachImport2FK] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[akt_nachImport2FK] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[akt_nachImport2FKL]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO
--
CREATE   PROCEDURE [dbo].[akt_nachImport2FKL]  with recompile AS
/* nur fuer Kataloge
  2006-09-25	klopfer: erstellt
  2013-06-13	erweitert
*/

update abschnitt set aImportiert = 'F'
update cons set cImportiert = 'F'
update einrichtung set erImportiert = 'F'
update fischart set fImportiert = 'F'
update gebiets_kz set gImportiert = 'F'
update gemeinde set gemImportiert = 'F'
update gebiet set gtImportiert = 'F'
update katalog set kImportiert = 'F'
update masz set mImportiert = 'F'
update referenz set rImportiert = 'F'
update referenzwert set rwImportiert = 'F'
update tknr_name set tkImportiert = 'F'
update wasserkoerper set wkImportiert = 'F'


GO
GRANT EXECUTE ON [dbo].[akt_nachImport2FKL] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[akt_nachImport2FKL] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[akt_psHochrechnung]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[akt_psHochrechnung] (@psID int) AS
/*
  erstellt / aktualisiert eine Hochrechnung für alle Fangprotokoll-Einträge der Probestelle @psID
  2012-07-23	klopfer: verwaltet nun psHochgerechnet
 */
BEGIN
SET NOCOUNT ON;

declare @fpID int

-- alle Hochrechnungsdaten löschen:
delete from fangprot where fpProbestelle = - @psID and ISNULL(fpHochgerechnet, 'F') = 'T'
update probestelle set psHochgerechnet = 'F' where psID = @psID
--
declare fpCur cursor for select fpID from fangprot where fpProbestelle = @psID and ISNULL(fpHochgerechnet, 'F') = 'F'
open fpCur
fetch next from fpCur into @fpID
while (@@FETCH_STATUS <> -1) begin
	exec [akt_fpHochrechnung] @fpID
	fetch next from fpCur into @fpID
end	
close fpCur
deallocate fpCur
--
if exists(select 1 from fangprot where fpProbestelle = - @psID and ISNULL(fpHochgerechnet, 'F') = 'T')
  update probestelle set psHochgerechnet = 'T' where psID = @psID

END


GO
GRANT EXECUTE ON [dbo].[akt_psHochrechnung] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[akt_psHochrechnung] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[akt_vorExport2FK]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE  PROCEDURE [dbo].[akt_vorExport2FK] (@QHost int, @ZHost int) AS
/* Export aus FKL mit dem Zweck des spaeteren Importes in FK (beschraenkt auf Hauptdaten, keine Kataloge)
  2013-06-13	ergänzt
*/

-- die PKs: Host und HostID eintragen (am Ziel werden neue IDs zugewiesen): 
--update bewertung set bHostID = bID, bHost = @QHost where isnull(bHostID, 0) = 0
--update dummy set dmHostID = dmID, dmHost = @QHost where isnull(dmHostID, 0) = 0
update fangprot set fpHostID = fpID, fpHost = @QHost where isnull(fpHostID, 0) = 0
update fangprot_wiss set fpwHostID = fpwID, fpwHost = @QHost where isnull(fpwHostID, 0) = 0
--update gesamtbewertung set gbHostID = gbID, gbHost = @QHost where isnull(gbHostID, 0) = 0
update k2ps_msel set k2ps_mselHostID = k2ps_mselID, k2ps_mselHost = @QHost where isnull(k2ps_mselHostID, 0) = 0
update probestelle set psHostID = psID, psHost = @QHost where isnull(psHostID, 0) = 0
--update wert set wHostID = wID, wHost = @QHost where isnull(wHostID, 0) = 0

-- FKs auf das Zielsystem umschluesseln, soweit die Referenzen aus diesem stammen:
/* kann entfallen, da die Kataloge mit ihren Ursprungs-ID importiert wurden:
update probestelle set psAbschnitt = aHostID from abschnitt where psAbschnitt = aID and aHost = @ZHost
update probestelle set psGebiets_kz = gHostID from gebiets_kz where psGebiets_kz = gID and gHost = @ZHost
update probestelle set psGemeinde = gemHostID from gemeinde where psGemeinde = gemID and gemHost = @ZHost
update probestelle set psEinrichtung_F = erHostID from einrichtung where psEinrichtung_F = erID and erHost = @ZHost
update probestelle set psEinrichtung_B = erHostID from einrichtung where psEinrichtung_B = erID and erHost = @ZHost
update probestelle set psErfass_Kat = kHostID from katalog where psErfass_Kat = kID and kHost = @ZHost
update probestelle set psBewirtart = kHostID from katalog where psBewirtart = kID and kHost = @ZHost
update probestelle set psGwTypbez = kHostID from katalog where psGwTypbez = kID and kHost = @ZHost
update probestelle set psFischreg = kHostID from katalog where psFischreg = kID and kHost = @ZHost
update probestelle set psWasserstand = kHostID from katalog where psWasserstand = kID and kHost = @ZHost
update probestelle set psStroemung = kHostID from katalog where psStroemung = kID and kHost = @ZHost
*/


GO
GRANT EXECUTE ON [dbo].[akt_vorExport2FK] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[akt_vorExport2FK] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[akt_vorExport2FKL]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE  PROCEDURE [dbo].[akt_vorExport2FKL] (@host int)  AS
/* history:
  2006-09-25	klopfer: erstellt
  2013-06-12	ergänzt
*/

-- Kataloge:
update abschnitt set aHostID = aID, aHost = @host where isnull(aHostID, 0) = 0
update cons set cHostID = cID, cHost = @host where isnull(cHostID, 0) = 0
update einrichtung set erHostID = erID, erHost = @host where isnull(erHostID, 0) = 0
update fischart set fHostID = fID, fHost = @host where isnull(fHostID, 0) = 0
update gebiets_kz set gHostID = gID, gHost = @host where isnull(gHostID, 0) = 0
update gemeinde set gemHostID = gemID, gemHost = @host where isnull(gemHostID, 0) = 0
update gebiet set gtHostID = gtID, gtHost = @host where isnull(gtHostID, 0) = 0
update katalog set kHostID = kID, kHost = @host where isnull(kHostID, 0) = 0
update masz set mHostID = mID, mHost = @host where isnull(mHostID, 0) = 0
update referenz set rHostID = rID, rHost = @host where isnull(rHostID, 0) = 0
update referenzwert set rwHostID = rwID, rwHost = @host where isnull(rwHostID, 0) = 0
update tknr_name set tkHostID = tkID, tkHost = @host where isnull(tkHostID, 0) = 0
update wasserkoerper set wkHostID = wkID, wkHost = @host where isnull(wkHostID, 0) = 0


GO
GRANT EXECUTE ON [dbo].[akt_vorExport2FKL] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[akt_vorExport2FKL] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[akt_zvbInitialisieren]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE proc [dbo].[akt_zvbInitialisieren] (@zvbID int, @zvbLogin varchar(35), @superuser int = 0) as
/*
  2012-11-14	zvbGruppe wird beim superuser eingetragen
  2013-06-12	erzeugt ggf. erste Lokation (für FKL)
  */
declare @zvrID int, @zvbGruppe int

if not exists(select 1 from dbo.zv_lokation) begin
	insert into dbo.zv_lokation (zvlKuerzel, zvlBezeichnung) values ('KW', 'Königswartha')
end

if not exists(select 1 from dbo.zv_benutzer where zvbID = @zvbID) begin
	select @zvrID = case when @superuser = 1 then -101 /* alle Rechte */ else -100 /* keine Rechte */ end
	select @zvbGruppe = case when @superuser = 1 then (select min(zvlID) from zv_lokation) else null end 
	select @zvbLogin = case when isnull(@zvbLogin, '') = '' then 'FKL' else @zvbLogin end
	insert into dbo.zv_benutzer(zvbID, zvbLogin, zvbName, zvbRolle, zvbGruppe) values (@zvbID, @zvbLogin, @zvbLogin, @zvrID, @zvbGruppe)
end


GO
GRANT EXECUTE ON [dbo].[akt_zvbInitialisieren] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[akt_zvbInitialisieren] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[akt_zveGarantieren]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[akt_zveGarantieren] (@zvbID int) AS
/* history:
  2008-10-12	klopfer: erstellt
  2011-06-28	klopfer: nun mit Lokationen
  2012-10-19	klopfer: keine allgemeinen Einstellungen für Benutzer
*/

declare @lokIDX int

-- Lokation bestimmen, falls @zvbID Benutzer ist:
if (@zvbID >= 0) select @lokIDX = - zvbGruppe from zv_benutzer where zvbID = @zvbID

insert into dbo.zv_einstellung (
	zveBenutzer, 
	zveEinstellungstyp, 
	zveTextWert)
select 
	@zvbID, 
	zvetID, 
	case when (@zvbID >= 0) then (select zveTextWert from dbo.zv_einstellung def where def.zveBenutzer = @lokIDX and def.zveEinstellungstyp = zvetID) else null end
from dbo.zv_einstellungstyp
where not exists(select 1 from dbo.zv_einstellung where zveBenutzer = @zvbID and zveEinstellungstyp = zvetID)

-- keine allgemeinen Eistellungen für Benutzer (aber für die Lokationen):
if (@zvbID >= 0) delete zv_einstellung from zv_einstellungstyp where zveBenutzer = @zvbID and zveEinstellungstyp = zvetID and ISNULL(zvetAllgemein, 'F') = 'T'


GO
GRANT EXECUTE ON [dbo].[akt_zveGarantieren] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[akt_zveGarantieren] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[akt_zvkxKomplettieren]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE proc [dbo].[akt_zvkxKomplettieren] (
	@nID int -- Benutzer
	, @tab varchar(20) -- betroffene Auswahltabelle (zvkxTyp)
) as

declare @s1 varchar(8000), @s2 varchar(8000)

select @s1 = '', @s2 = ''

if (@tab = 'landkreise')
	select 
		@s1 = @s1 + case when @s1 <> '' then ',' else '' end + '~''' + gemKreis + '~''' 
		, @s2 = @s2 + case when @s2 <> '' then ', ' else '' end + gemKreis
	from gemeinde group by gemKreis order by gemKreis

if (@tab = 'gemeinden')
	select 
		@s1 = @s1 + case when @s1 <> '' then ',' else '' end + cast(gemID as varchar)
		, @s2 = @s2 + case when @s2 <> '' then ', ' else '' end + gemName
	from gemeinde order by gemKreis, gemName

if (@tab = 'erfkat')
	select 
		@s1 = @s1 + case when @s1 <> '' then ',' else '' end + cast(kID as varchar)
		, @s2 = @s2 + case when @s2 <> '' then ', ' else '' end + kDaten
	from katalog 
	where kKatalogart = 'erfasskat'
	order by kOrdnung, kDaten

if (@tab = 'anlaesse')
	select 
		@s1 = @s1 + case when @s1 <> '' then ',' else '' end + cast(kID as varchar)
		, @s2 = @s2 + case when @s2 <> '' then ', ' else '' end + kDaten
	from katalog 
	where kKatalogart = 'betreff'
	order by kOrdnung, kDaten

if (@tab = 'fischreg')
	select 
		@s1 = @s1 + case when @s1 <> '' then ',' else '' end + cast(kID as varchar)
		, @s2 = @s2 + case when @s2 <> '' then ', ' else '' end + kDaten
	from katalog 
	where kKatalogart = 'fischreg'
	order by kOrdnung, kDaten

if (@tab = 'tk') begin
	select @s1 = '-1'
	select @s2 = '<unbestimmt>'
	select 
		@s1 = @s1 + case when @s1 <> '' then ',' else '' end + cast(tkID as varchar)
		, @s2 = @s2 + case when @s2 <> '' then ', ' else '' end + tkNummer
	from tknr_name
	order by tkNummer
end

-- Auswahl in den Kontext speichern:
delete from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = @tab
insert into zv_kontextX(zvkxBenutzer, zvkxTyp, zvkxListe1, zvkxListe2, zvkxOption) values(@nID, @tab, @s1, @s2, 'A')

-- Liste der internen IDs ans frontend
select @s1



GO
GRANT EXECUTE ON [dbo].[akt_zvkxKomplettieren] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[akt_zvkxKomplettieren] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[akt_zvx2rGarantieren]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[akt_zvx2rGarantieren] (@zvrID int) AS
--
insert into zv_x2r (zvx2rRolle, zvx2rTyp, zvx2rWert, zvx2rOn, zvx2rBearbeiten) select @zvrID, 'Funktion', zvfID, 'F', 'F' from dbo.zv_funktion
where not exists(select * from zv_x2r where zvx2rRolle = @zvrID and zvx2rTyp = 'Funktion' and zvx2rWert = zvfID)
--


GO
GRANT EXECUTE ON [dbo].[akt_zvx2rGarantieren] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[akt_zvx2rGarantieren] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[cons_er]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[cons_er] (@erObs int, @erRem int) AS
/* history:
  2006-10-02	klopfer: erstellt
*/

update probestelle set psEinrichtung_F = @erRem where psEinrichtung_F = @erObs
update probestelle set psEinrichtung_B = @erRem where psEinrichtung_B = @erObs

delete from einrichtung where erID = @erObs

insert into dbo.cons (cTabelle, cGeloescht, cKonsolidiert) values ('einrichtung', @erObs, @erRem)


GO
GRANT EXECUTE ON [dbo].[cons_er] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[cons_er] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[cons_f]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[cons_f] (@fObs int, @fRem int) AS
/* history:
  2006-10-02	klopfer: erstellt
*/

update fangprot set fpFischart = @fRem where fpFischart = @fObs
update fangprot_wiss set fpwFischart = @fRem where fpwFischart = @fObs

delete from fischart where fID = @fObs

insert into dbo.cons (cTabelle, cGeloescht, cKonsolidiert) values ('fischart', @fObs, @fRem)


GO
GRANT EXECUTE ON [dbo].[cons_f] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[cons_f] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[cons_g]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[cons_g] (@gObs int, @gRem int) AS
/* history:
  2006-10-02	klopfer: registriert nun in cons
  2007-01-03	klopfer: aktualisiert nun psProbestellennr
*/

update probestelle set psProbestellennr = isnull(gGebiets_kz, '') + '_' + right(psProbestellennr, len(psProbestellennr) - charindex('_', psProbestellennr, 1)) from gebiets_kz where gID = @gRem and psGebiets_kz = @gObs
update probestelle set psGebiets_kz = @gRem where psGebiets_kz = @gObs
update wasserkoerper set wkGebietsKz = @gRem where wkGebietsKz = @gObs

delete from gebiets_kz where gID = @gObs

insert into dbo.cons (cTabelle, cGeloescht, cKonsolidiert) values ('gebiets_kz', @gObs, @gRem)


GO
GRANT EXECUTE ON [dbo].[cons_g] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[cons_g] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[cons_gem]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE  PROCEDURE [dbo].[cons_gem] (@gemObs int, @gemRem int) AS
/* history:
  2006-10-02	klopfer: erstellt
*/

update probestelle set psGemeinde = @gemRem where psGemeinde = @gemObs

delete from gemeinde where gemID = @gemObs

insert into dbo.cons (cTabelle, cGeloescht, cKonsolidiert) values ('gem_1_99', @gemObs, @gemRem)


GO
GRANT EXECUTE ON [dbo].[cons_gem] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[cons_gem] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[cons_k]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[cons_k] (@kObs int, @kRem int) AS
/* history:
  2006-10-02	klopfer: erstellt
  2006-10-07	klopfer: bBewertung statt wkBewertung
*/

declare @kKatalogart varchar(20)
select @kKatalogart = kKatalogart from katalog where kID = @kObs

if (@kKatalogart = 'bewpraed') update bewertung set bPraedikat = @kRem where bPraedikat = @kObs
if (@kKatalogart = 'betreff') update probestelle set psBetreff = @kRem where psBetreff = @kObs
if (@kKatalogart = 'bewirtart') update probestelle set psBewirtart = @kRem where psBewirtart = @kObs
if (@kKatalogart = 'erfasskat') update probestelle set psErfass_Kat = @kRem where psErfass_Kat = @kObs
if (@kKatalogart in ('fliessgw', 'standgw')) update probestelle set psGwTypbez = @kRem where psGwTypbez = @kObs
if (@kKatalogart = 'fischreg') update probestelle set psFischreg = @kRem where psFischreg = @kObs
if (@kKatalogart = 'wasserstand') update probestelle set psWasserstand = @kRem where psWasserstand = @kObs
if (@kKatalogart = 'stroemung') update probestelle set psStroemung = @kRem where psStroemung = @kObs
if (@kKatalogart = 'linienfuehrung') update probestelle set psLinienfuehrung = @kRem where psLinienfuehrung = @kObs
if (@kKatalogart = 'oekowert') update probestelle set psOekowert = @kRem where psOekowert = @kObs
if (@kKatalogart = 'fangmethode') update probestelle set psFangmethode = @kRem where psFangmethode = @kObs

if (@kKatalogart in ('struktur', 'bewuchs', 'umland', 'beeintr', 'fg_elektro', 'fg_reuse', 'fg_stellnetz', 'fg_zugnetz')) update k2ps_msel set k2ps_mselKatalog = @kRem where k2ps_mselKatalog = @kObs

delete from katalog where kID = @kObs

insert into dbo.cons (cTabelle, cGeloescht, cKonsolidiert) values ('katalog', @kObs, @kRem)


GO
GRANT EXECUTE ON [dbo].[cons_k] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[cons_k] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[cons_r]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO


CREATE PROCEDURE [dbo].[cons_r] (@rObs int, @rRem int) AS
/* 
  2006-10-02	klopfer: erstellt
  2022-04-02	klopfer: Tabellen dummy und referenzwert statt r2wk (obsolet)
*/

update fischart set fReferenz = @rRem where fReferenz = @rObs
update dummy set dmReferenz = @rRem where dmReferenz = @rObs
update referenzwert set rwReferenz = @rRem where rwReferenz = @rObs

delete from referenz where rID = @rObs

insert into dbo.cons (cTabelle, cGeloescht, cKonsolidiert) values ('referenz', @rObs, @rRem)

GO
GRANT EXECUTE ON [dbo].[cons_r] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[cons_r] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[cons_tk]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[cons_tk] (@tkObs int, @tkRem int) AS
/* history:
  2006-10-02	klopfer: erstellt
*/

update probestelle set psTKnr_name = @tkRem where psTKnr_name = @tkObs

delete from tknr_name where tkID = @tkObs

insert into dbo.cons (cTabelle, cGeloescht, cKonsolidiert) values ('tknr_name', @tkObs, @tkRem)


GO
GRANT EXECUTE ON [dbo].[cons_tk] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[cons_tk] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[d_zvx2r_s]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE proc [dbo].[d_zvx2r_s] (@zvrID int) as
/* history:
*/
--
create table #x2r (
	zvx2rID int null,
	zvx2rTyp varchar(20) null,
	zvx2rWert int null,
	Bezeichnung varchar(80) null,
	zvx2rOn char(1) null,
	zvx2rBearbeiten char(1) null,
	zvrBezeichnung varchar(80) null,
	Bearbeitbar char(1) null,
	Ordnung int null
)
--
delete from zv_x2r where zvx2rTyp = 'Funktion' and not exists (select 1 from zv_funktion where zvfID = zvx2rWert)
--
insert into #x2r (zvx2rID, zvx2rTyp, zvx2rWert, zvx2rOn, zvx2rBearbeiten, zvrBezeichnung) select zvx2rID, zvx2rTyp, zvx2rWert, zvx2rOn, zvx2rBearbeiten, zvrBezeichnung
from zv_x2r join zv_rolle on zvx2rRolle = zvrID
where zvx2rRolle = isnull(@zvrID, zvx2rRolle)
--
-- Bezeichnungen der Funktionen:
update #x2r set Bezeichnung = zvfBezeichnung, Bearbeitbar = zvfBearbeitbar, Ordnung = zvfID from zv_funktion where zvx2rTyp = 'Funktion' and zvx2rWert = zvfID
--
select * from #x2r order by zvx2rTyp desc, Ordnung
--


GO
GRANT EXECUTE ON [dbo].[d_zvx2r_s] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[d_zvx2r_s] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[d_zvx2r_u]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--
CREATE proc [dbo].[d_zvx2r_u] (@zvx2rID int, @zvx2rOn char(1), @zvx2rBearbeiten char(1)) as
--
update zv_x2r set
  zvx2rOn = @zvx2rOn,  zvx2rBearbeiten = @zvx2rBearbeiten
where zvx2rID = @zvx2rID
--


GO
GRANT EXECUTE ON [dbo].[d_zvx2r_u] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[d_zvx2r_u] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[db_lstColumns]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create proc [dbo].[db_lstColumns] (@object_id int) as
/* liefert eine Auflistung aller Columns der Tabelle @object_id
  2010-03-24	klopfer: erstellt
  */

if (patindex('8.%', cast(serverproperty('ProductVersion') as varchar)) > 0)
	-- SQLServer 2000:
	select c.name as cname, t.name as tname, c.length, isnullable, colstat, null as collation_name
	from syscolumns c join systypes t on c.xusertype = t.xusertype
	where c.id = @object_id 
	order by colid
else
	select c.name as cname, t.name as tname, max_length, is_nullable, is_identity, collation_name 
	from sys.all_columns c join sys.systypes t on c.user_type_id = t.xusertype
	where object_id = @object_id
	order by column_id


GO
GRANT EXECUTE ON [dbo].[db_lstColumns] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[db_lstColumns] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[db_lstSQL]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE proc [dbo].[db_lstSQL] (@object_id int) as
/* liefert den SQL-Text des Objektes @object_id
  2010-03-25	klopfer: erstellt
  2010-04-19	klopfer: dyn. SQL
  */
declare @sql varchar(4000)

if (patindex('8.%', cast(serverproperty('ProductVersion') as varchar)) > 0)
	-- SQLServer 2000:
	select @sql = '
	select ltrim(rtrim(m.text)) as [sql] into #lstSQL from syscomments m where m.id = ' + str(@object_id) + '
	update #lstSQL set [sql] = ltrim(rtrim([sql]))

	declare @ct int
	select @ct = 1
	while (@ct > 0) begin
		update #lstSQL set [sql] = right([sql], len([sql]) - 1) where charindex(left([sql], 1), char(13) + char(10)) > 0
		select @ct = @@ROWCOUNT
	end

	select [sql] from #lstSQL
	drop table #lstSQL
	'
else
	select @sql = '
	create table #lstSQL ([sql] varchar(max))
	insert into #lstSQL select ltrim(rtrim(m.definition)) from sys.all_sql_modules m where m.object_id = ' + str(@object_id) + '
	update #lstSQL set [sql] = ltrim(rtrim([sql]))

	declare @ct int
	select @ct = 1
	while (@ct > 0) begin
		update #lstSQL set [sql] = right([sql], len([sql]) - 1) where charindex(left([sql], 1), char(13) + char(10)) > 0
		select @ct = @@ROWCOUNT
	end
	
	select [sql] from #lstSQL
	drop table #lstSQL
	'
--
exec (@sql)


GO
GRANT EXECUTE ON [dbo].[db_lstSQL] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[db_lstSQL] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[db_lstSQLObjects]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE proc [dbo].[db_lstSQLObjects] as
/* liefert eine Auflistung aller SQL-Objekte
  2010-03-25	klopfer: erstellt
  */

if (patindex('8.%', cast(serverproperty('ProductVersion') as varchar)) > 0)
	-- SQLServer 2000:
	select o.xtype as type, o.name as name, o.id as [object_id]
	from sysobjects o join syscomments m on o.id = m.id
	order by case o.xtype when 'P' then 1 when 'FN' then 2 when 'TF' then 3 when 'TR' then 4 when 'V' then 5 else 6 end, o.name
else
	select o.type as [type], o.name as [name], o.object_id as [object_id]
	from sys.objects o join sys.all_sql_modules m on o.object_id = m.object_id
	order by case o.type when 'P' then 1 when 'FN' then 2 when 'TF' then 3 when 'TR' then 4 when 'V' then 5 else 6 end, o.name


GO
GRANT EXECUTE ON [dbo].[db_lstSQLObjects] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[db_lstSQLObjects] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[db_lstTables]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create proc [dbo].[db_lstTables] as
/* liefert eine Auflistung aller Usertables der aktuellen Datenbank
  2010-03-24	klopfer: erstellt
  */

if (patindex('8.%', cast(serverproperty('ProductVersion') as varchar)) > 0)
	-- SQLServer 2000:
	select name, id from sysobjects where xtype = 'U' order by name
else
	select [name], object_id from sys.objects where type = 'U' order by name


GO
GRANT EXECUTE ON [dbo].[db_lstTables] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[db_lstTables] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[doc_abundanzen]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE  PROCEDURE [dbo].[doc_abundanzen] (
	@nID int, 
	@gkz varchar(40), 
	@gID int, 
	@wknr varchar(80),
	@gwtyp char(1),
	@gattung char(1),
	@fID int, 
	@Dat_von DateTime, 
	@Dat_bis DateTime,
	@HR char(1) = 'F',
	@debug bit = 1
	)
	 AS
/* history:
 2004-07-01	keyn: erstellt (vorlage: doc_fangmassenverteilung)
 2004-07-07	keyn: anzahl arten hinzu
 2005-02-24	keyn: arg fischart hinzu (blind)
 2006-07-30	klopfer: gruppe 0<2 mit in der ersten spalte summiert; Suchbegriff Anlaesse und Fischreg und Erfkat hinzu
 2006-07-31	klopfer: gruppe 0<2 nun doch explizit
 2007-04-18	klopfer: mit wknr und gwtyp
 2009-02-03 klopfer: erweiterung auf varchar(4000)
 2009-04-05 klopfer: befischte Strecke hinzu
 2011-07-02 klopfer: Leereinträge ('keine Fische') raus
 2012-07-23	klopfer: Option @HR
 2015-12-01	klopfer: Arg @psnr auf vc40
 2018-10-08 klopfer: einschlägige Arten vorab gesammelt
 2019-07-01	klopfer: @gkz statt @psnr, @gattung hinzu
 2019-08-02	klopfer: Abschnittsauswahl hinzu
*/

declare @MinDate datetime, @MaxDate datetime
select @MinDate = '01.01.1900', @MaxDate = '01.01.3000'
declare @Anz_ges int, @Anz_Befischungen int, @Anz_Arten int
declare @s1 varchar(4000), @s2 varchar(4000), @s3 varchar(4000), @s4 varchar(4000), @s5 varchar(4000), @sql varchar(4000)
declare @zvkxOptionGemeinden char(1), @zvkxListe1Gemeinden varchar(4000), @zvkxOptionLandkreise char(1), @zvkxListe1Landkreise varchar(4000), @zvkxListe2Landkreise varchar(4000)
declare @zvkxOption char(1), @zvkxListe1 varchar(4000), @zvkxListe2 varchar(4000)

-- alle betroffenen Fischarten:
create table #f (fID int)
insert into #f (fID) select fID from fischart where fGattung = isnull(@gattung, fGattung) and fBez_deutsch not like '%keine %'

-- betroffene Probestellen bestimmen:
create table #ps (psID int null, psHochgerechnet char(1) null)

select @s1 = 'insert into #ps (psID, psHochgerechnet) select psID, psHochgerechnet From probestelle join gemeinde on psGemeinde = gemID '
select @s2 = 'Where 1 = 1'
if (@gkz is not null) select @s2 = @s2 + ' and (select gGebiets_kz from gebiets_kz where gID = psGebiets_kz) Like ''' + @gkz + '%'' '
if (@gID is not null) select @s2 = @s2 + 'and isnull(psGebiets_kz, -1)  = ' + ltrim(str(@gID)) + ' ' 
if (@Dat_von is not null) select @s2 = @s2 + ' and psDatum >= convert(datetime, ''' + convert(varchar(10), @Dat_von, 104) + ''', 104) '
if (@Dat_bis is not null) select @s2 = @s2 + ' and psDatum <= convert(datetime, ''' + convert(varchar(10), @Dat_bis, 104) + ''', 104) '
if (@wknr is not null) select @s2 = @s2 + ' and exists(select 1 from abschnitt join wasserkoerper on aWasserkoerper = wkID where aID = psAbschnitt and (wkNummer like ''' + @wknr + '%'' or wkBezeichnung like ''' + @wknr + '%'')) '
if (@gwtyp is not null) select @s2 = @s2 + ' and psGwTyp = ''' + @gwtyp + ''' '
if (@gattung is not null) select @s2 = @s2 + ' and isnull(psGattung, ''F'') = ''' + @gattung + ''' '

select @zvkxOptionGemeinden = zvkxOption, @zvkxListe1Gemeinden = convert(varchar(4000), zvkxListe1) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'gemeinden'
if (right(@zvkxListe1Gemeinden, 1) = ',') select @zvkxListe1Gemeinden = substring(@zvkxListe1Gemeinden, 1, datalength(@zvkxListe1Gemeinden) - 1)

select @zvkxOptionLandkreise = zvkxOption, @zvkxListe1Landkreise = convert(varchar(4000), zvkxListe1), @zvkxListe2Landkreise = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'landkreise'
if (@zvkxOptionLandkreise = 'A') select @zvkxListe2Landkreise = 'alle'
if (isnull(@zvkxOptionGemeinden, 'K') = 'K') 
  select @s3 = ' and 1 = 0 '
else 
  if (isnull(@zvkxOptionGemeinden, 'K') = 'A')  and (isnull(@zvkxOptionLandkreise, 'K') = 'A')
    select @s3 = ''
  else
    select @s3 = ' and psGemeinde in (' + @zvkxListe1Gemeinden + ') '
--
select @sql = @s1 + @s2 + @s3

-- Abschnitte:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'abschnitte'
if (isnull(@zvkxOption, 'U') not in ('U', 'A')) begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and psAbschnitt in (' + @zvkxListe1 + ') '
end

-- anlaesse:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'anlaesse'
if (@zvkxOption <> 'A') begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and ( psBetreff in (' + @zvkxListe1 + ') or '
  if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @sql = @sql + ' psBetreff is null ) ' else select @sql = @sql + ' 1 = 0 ) '
end
-- fischreg:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'fischreg'
if (@zvkxOption <> 'A') begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and ( psFischreg in (' + @zvkxListe1 + ') or '
  if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @sql = @sql + ' psFischreg is null ) ' else select @sql = @sql + ' 1 = 0 ) '
end
-- erfkat:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'erfkat'
if (@zvkxOption <> 'A') begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and ( psErfass_Kat in (' + @zvkxListe1 + ') or '
  if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @sql = @sql + ' psErfass_Kat is null ) ' else select @sql = @sql + ' 1 = 0 ) '
end
-- TK:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'tk'
if (@zvkxOption <> 'A') begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and ( psTKnr_name in (' + @zvkxListe1 + ') or '
  if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @sql = @sql + ' psTKnr_name is null ) ' else select @sql = @sql + ' 1 = 0 ) '
end
--
exec (@sql)


--
Create Table #a (
a_Gewaesser varchar(80) Null,
a_Fischreg varchar(255) null,
a_Datum_von DateTime Null,
a_Datum_bis DateTime Null,
a_Anz_Befischungen int null,
a_Laenge float null,
a_Anz_Arten int null,
a_Landkreis varchar(255) null,
a_Fischart varchar(80) Null,
a_Anz_ges int null,
a_Prozent float null,
a_Anz_0_2 int null,
a_Anz_1_4 int Null,
a_Anz_5_9 int Null,
a_Anz_10_19 int Null,
a_Anz_20_29 int Null,
a_Anz_30_n int Null,
a_fID int null,
a_band int null -- 1 fuer detail, 2 fuer summe
)

Insert Into #a (
	a_fID, 
	a_Anz_0_2,
	a_Anz_1_4,
	a_Anz_5_9,
	a_Anz_10_19,
	a_Anz_20_29,
	a_Anz_30_n,
	a_band
)
select
	fID, 
	sum(isnull(fpAnz_0_2, 0)),
	sum(isnull(fpAnz_1_4, 0)), 
	sum(isnull(fpAnz_5_9, 0)), 
	sum(isnull(fpAnz_10_14, 0) + isnull(fpAnz_15_19, 0)), 
	sum(isnull(fpAnz_20_24, 0) + isnull(fpAnz_25_29, 0)),
	sum(isnull(fpAnz_30_39, 0) + isnull(fpAnz_40_49, 0) + isnull(fpAnz_50_59, 0) + isnull(fpAnz_60_69, 0) + isnull(fpAnz_70_n, 0)),
	1
From 
	fangprot 
	join #f on fpFischart = fID
	join #ps on psID = fpProbestelle * case when @HR = 'T' and isnull(psHochgerechnet, 'F') = 'T' then -1 else 1 end
Group by fID

update #a set a_Anz_ges = isnull(a_Anz_0_2, 0) + isnull(a_Anz_1_4, 0) + isnull(a_Anz_5_9, 0) + isnull(a_Anz_10_19, 0) + isnull(a_Anz_20_29, 0) + isnull(a_Anz_30_n, 0)

insert into #a (a_fID, a_Fischart, a_Anz_ges, a_Prozent, a_band) select -1, 'Summe aller Arten', sum(a_Anz_ges), 100, 2 from #a
select @Anz_ges = a_Anz_ges from #a where a_fID = -1

update #a set a_Prozent = (100 * convert(float, a_Anz_ges)) / convert(float, @Anz_ges)

update #a set a_Fischart = isnull(fBez_deutsch, '') + case when isnull(fBez_latein, '') <> '' then ' (' + fBez_latein + ')' else '' end from fischart where fID = a_fID

select @Anz_Befischungen = count(*) from #ps
update #a set a_Anz_Befischungen = @Anz_Befischungen

update #a set a_Laenge = (select sum(isnull(psGwStrecke_eff, 0)) / 1000. from probestelle ps join #ps on ps.psID = #ps.psID)
-- 
select @Anz_Arten = count(*) - 1 from #a
update #a set a_Anz_Arten = @Anz_Arten

-- allgemeine Daten:

-- Gewässerbezeichnungen (im Kontext EINES Gewässers)
update #a set a_Gewaesser = gGewaesser From gebiets_kz Where gID = @gID

-- Erfassungszeitraum:
if @Dat_von is not null
  update #a set a_Datum_von = @Dat_von
else
  Update #a Set a_Datum_von = (Select min(psDatum) From probestelle ps join #ps on ps.psID = #ps.psID)
if @Dat_bis is not null
  update #a set a_Datum_bis = @Dat_bis
else
  update #a Set a_Datum_bis = (Select max(psDatum) From probestelle ps join #ps on ps.psID = #ps.psID)
--
-- Fischereiregionen:
Declare @Fischreg varchar(4000), @Fischreg_liste varchar(4000), @kOrdnung int
Select @Fischreg_liste = ''
Declare Fischreg Cursor For Select distinct kDaten, kOrdnung From katalog join probestelle ps on kID = psFischreg join #ps on ps.psID = #ps.psID order by kOrdnung
Open Fischreg
Fetch next From Fischreg Into @Fischreg, @kOrdnung
While (@@fetch_status <> -1)
begin
  Select @Fischreg_liste = @Fischreg_liste + @Fischreg + ', '
  Fetch Next From Fischreg Into @Fischreg, @kOrdnung
end
Close Fischreg
Deallocate Fischreg

If  DataLength(IsNull(@Fischreg_liste, '')) > 0 
Begin
	Select @Fischreg_liste = RTrim(@Fischreg_liste)
	-- Letztes Komma weg
	Select @Fischreg_liste = Substring(@Fischreg_liste, 1, DataLength(@Fischreg_liste) - 1) 
	 Update #a Set a_Fischreg = ltrim(@Fischreg_liste)
End

-- Landkreise:
update #a set a_Landkreis = @zvkxListe2Landkreise

Select * From #a order by a_band, a_Fischart

drop table #f
Drop Table #a
Drop Table #ps
--


GO
GRANT EXECUTE ON [dbo].[doc_abundanzen] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[doc_abundanzen] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[doc_arteninventar]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
--
CREATE   PROCEDURE [dbo].[doc_arteninventar] (
	@nID int,
	@gkz varchar(40), 
	@gID int,
	@wknr varchar(80),
	@gwtyp char(1),
	@gattung char(1),
	@fID int = null, 
	@Dat_von DateTime, 
	@Dat_bis DateTime,
	@HR char(1) = 'F'
) AS
/* liefert jeweils fuer ein gewaesser angaben zu den vorhandenen probestrecken und arten
  history:
  2005-02-24	keyn: ueberarbeitet; nun mehrfachauswahl landkreise und gemeinden (ursprung: fritsche)
  2006-07-30	klopfer: mit Anlass und Fischreg und Erfkat als Suchbegriff
  2006-10-07	klopfer: anzahl der befischungen hinzu
  2007-04-18	klopfer: nun mit @wknr und @gwtyp
  2009-02-03	klopfer: überall varchar(4000)
  2009-04-04	klopfer: Streckenlaenge hinzu; TK
  2011-07-02	klopfer: schließt Leereinträge aus ('keine Fische')
  2012-07-10	klopfer: zwecks Vergleichbarkeit mit dem Bericht Abundanzen: left outer join zum fangprot (es gibt Probestellen ohne Protokoll)
  2012-07-23	klopfer: Option @HR
  2015-12-01	klopfer: arg @psnr auf vc40
  2019-07-01ff.	klopfer: @gkz statt @psnr; @gattung hinzu
  2019-08-02	klopfer: Abschnittsauswahl hinzu
*/

-- konstanten:
declare @MinDate datetime, @MaxDate datetime
select @MinDate = '01.01.1900', @MaxDate = '01.01.3000'

-- variablen:
declare @sql varchar(8000)
declare @zvkxOptionGemeinden char(1), @zvkxListe1Gemeinden varchar(4000), @zvkxOptionLandkreise char(1), @zvkxListe1Landkreise varchar(4000), @zvkxListe2Landkreise varchar(4000)
declare @zvkxOption char(1), @zvkxListe1 varchar(4000), @zvkxListe2 varchar(4000)
Declare @gID_Cur int
Declare @Probestrecken varchar(4000), @Gemeinden varchar(4000), @Hoehenlagen varchar(4000), @Fischarten varchar(4000), @Fischregionen varchar(4000), @Krebsarten varchar(4000)
Declare @NL char(2)
Select @NL = CHAR(13) + CHAR(10)
Declare @Fischanz int

-- alle betroffenen probestellen bestimmen:
Create Table #t (
	t_psID int Null,
	t_psDatum DateTime Null,
	t_Sum_kg_ha Float Null,
	t_psHoehenlage Float Null,
	t_psGwStrecke_eff float null
)

select @sql = 'insert into #t (t_psID, t_psDatum, t_Sum_kg_ha, t_psHoehenlage, t_psGwStrecke_eff) '
select @sql = @sql + ' select psID, psDatum, sum(fpGewicht_ha), psHoehenlage, psGwStrecke_eff '
select @sql = @sql + ' From probestelle left outer join fangprot '
select @sql = @sql + ' on psID = fpProbestelle * case when ''' + @HR + ''' = ''T'' and isnull(psHochgerechnet, ''F'') = ''T'' then -1 else 1 end'
select @sql = @sql + ' left outer join fischart on fpFischart = fID and fBez_deutsch not like ''%keine %'' '
select @sql = @sql + ' Where 1 = 1 '

if (@gkz is not null) select @sql = @sql + ' and (select gGebiets_kz from gebiets_kz where gID = psGebiets_kz) Like ''' + @gkz + '%'' '
if (@gID is not null) select @sql = @sql + 'and isnull(psGebiets_kz, -1)  = ' + ltrim(str(@gID)) + ' ' 
if (@Dat_von is not null) select @sql = @sql + ' and psDatum >= convert(datetime, ''' + convert(varchar(10), @Dat_von, 104) + ''', 104) '
if (@Dat_bis is not null) select @sql = @sql + ' and psDatum <= convert(datetime, ''' + convert(varchar(10), @Dat_bis, 104) + ''', 104) '
if (@wknr is not null) select @sql = @sql + ' and exists(select 1 from abschnitt join wasserkoerper on aWasserkoerper = wkID where aID = psAbschnitt and (wkNummer like ''' + @wknr + '%'' or wkBezeichnung like ''' + @wknr + '%'')) '
if (@gwtyp is not null) select @sql = @sql + ' and psGwTyp = ''' + @gwtyp + ''' '
if (@gattung is not null) select @sql = @sql + ' and isnull(psGattung, ''F'') = ''' + @gattung + ''' '

-- Gemeiden (abhaengig von Landkreisen):
select @zvkxOptionLandkreise = zvkxOption, @zvkxListe1Landkreise = convert(varchar(4000), zvkxListe1), @zvkxListe2Landkreise = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'landkreise'
if (@zvkxOptionLandkreise = 'A') select @zvkxListe2Landkreise = 'alle'
select @zvkxOptionGemeinden = zvkxOption, @zvkxListe1Gemeinden = convert(varchar(4000), zvkxListe1) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'gemeinden'
if (right(@zvkxListe1Gemeinden, 1) = ',') select @zvkxListe1Gemeinden = substring(@zvkxListe1Gemeinden, 1, datalength(@zvkxListe1Gemeinden) - 1)
if (isnull(@zvkxOptionGemeinden, 'K') = 'K') 
  select @sql = @sql + ' and 1 = 0 '
else 
  if (isnull(@zvkxOptionGemeinden, 'K') = 'A')  and (isnull(@zvkxOptionLandkreise, 'K') = 'A') select @sql = @sql + '' else select @sql = @sql + ' and psGemeinde in (' + @zvkxListe1Gemeinden + ') '
--
-- Abschnitte:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'abschnitte'
if (isnull(@zvkxOption, 'U') not in ('U', 'A')) begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and psAbschnitt in (' + @zvkxListe1 + ') '
end
-- anlaesse:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'anlaesse'
if (@zvkxOption <> 'A') begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and ( psBetreff in (' + @zvkxListe1 + ') or '
  if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @sql = @sql + ' psBetreff is null ) ' else select @sql = @sql + ' 1 = 0 ) '
end
-- fischreg:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'fischreg'
if (@zvkxOption <> 'A') begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and ( psFischreg in (' + @zvkxListe1 + ') or '
  if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @sql = @sql + ' psFischreg is null ) ' else select @sql = @sql + ' 1 = 0 ) '
end
-- erfkat:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'erfkat'
if (@zvkxOption <> 'A') begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and ( psErfass_Kat in (' + @zvkxListe1 + ') or '
  if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @sql = @sql + ' psErfass_Kat is null ) ' else select @sql = @sql + ' 1 = 0 ) '
end
-- TK:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'tk'
if (@zvkxOption <> 'A') begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and ( psTKnr_name in (' + @zvkxListe1 + ') or '
  if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @sql = @sql + ' psTKnr_name is null ) ' else select @sql = @sql + ' 1 = 0 ) '
end
--
select @sql = @sql + ' Group by psID, psDatum, psHoehenlage, psGwStrecke_eff Order by psDatum desc'
exec (@sql)

-- ausgabetabelle:
Create Table #ausgabe
(
a_gID int Null,
a_Gewaesser varchar(80) Null,
a_Probestrecke text Null,
a_Gemeinde text Null,
a_Hoehenlage text Null,
a_Befischungen int null,
a_Laenge float null,
a_Fischregionen text Null,
a_Hoehe_ab int Null,
a_Hoehe_bis int Null,
a_Datum_von DateTime Null,
a_Datum_bis DateTime Null,
a_Anz_Fisch int Null,
a_Fischart text Null,
a_Fisch_kg_ha_min float Null,
a_Fisch_kg_ha_max float Null,
a_Anz_Krebs int Null,
a_Krebsarten text Null
)

-- Alle Gewässer gruppiert in die Ausgabetabelle laden: 
Insert Into #ausgabe (a_gID) Select psGebiets_kz From probestelle, #t Where psID = t_psID Group by psGebiets_kz
Update #ausgabe Set a_Gewaesser = gGewaesser From gebiets_kz Where gID = a_gID
--
-- temp. tab fuer ausgabe probestrecke/gemeinde/hoehenlage:
create table #psliste (
	Probestrecke varchar(80) null,
	Gemeinde varchar(40) null,
	Hoehenlage float null
)

Declare GW Cursor For Select a_gID From #ausgabe
-- ueber alle Gewaesser:
Open GW
Fetch next From GW Into @gID_Cur
While (@@fetch_status <> -1) Begin

	-- listen der probestrecken, gemeinden und hoehenlagen:
	delete from #psliste
	insert into #psliste (Probestrecke, Gemeinde, Hoehenlage)
	select distinct 
		case when isnull(psProbestrecke, '') = '' then 'keine Angabe' else psProbestrecke end, 
		case when isnull(gemName, '') = '' then 'keine Angabe' else gemName end, 
		psHoehenlage
	from #t join probestelle on t_psID = psID join gemeinde on gemID = psGemeinde
	where psGebiets_kz = @gID_Cur

	Select @Probestrecken = ''
	Select @Gemeinden = ''
	Select @Hoehenlagen = ''
	select 
		@Probestrecken = @Probestrecken + '- ' + ltrim(rtrim(Probestrecke)) + @NL,
		@Gemeinden = @Gemeinden + '- ' + ltrim(rtrim(Gemeinde)) + @NL,
 		@Hoehenlagen = @Hoehenlagen + replace(convert(varchar, Hoehenlage), '.', ',') + @NL
	from #psliste
	order by Probestrecke
	Update #ausgabe Set a_Probestrecke = LTrim(RTrim(@Probestrecken)) Where a_gID = @gID_Cur
	Update #ausgabe Set a_Gemeinde = LTrim(RTrim(@Gemeinden)) Where a_gID = @gID_Cur
	Update #ausgabe Set a_Hoehenlage = LTrim(RTrim(@Hoehenlagen)) Where a_gID = @gID_Cur


	Update #ausgabe set a_Hoehe_ab = (Select Min(psHoehenlage) From #t, probestelle Where psID = t_psID And psGebiets_kz = @gID_Cur) Where a_gID = @gID_Cur
	Update #ausgabe set a_Hoehe_bis = (Select Max(psHoehenlage) From #t, probestelle Where psID = t_psID And psGebiets_kz = @gID_Cur) Where a_gID = @gID_Cur
	Update #ausgabe set a_Datum_von = (Select Min(psDatum) From #t, probestelle Where psID = t_psID And psGebiets_kz = @gID_Cur) Where a_gID = @gID_Cur
	Update #ausgabe set a_Datum_bis = (Select Max(psDatum) From #t, probestelle Where psID = t_psID And psGebiets_kz = @gID_Cur) Where a_gID = @gID_Cur

	-- Liste der Fischregionen:
	Select @Fischregionen = ''
	Select @Fischregionen = @Fischregionen + kDaten + ', ' 
	From #t, probestelle, katalog 
	Where kID = psFischreg And psID = t_psID And psGebiets_kz = @gID_Cur 
	Group by kDaten, kOrdnung 
	Order by kOrdnung, kDaten

	If (@Fischregionen <> '') Update #ausgabe Set a_Fischregionen = Substring(@Fischregionen, 1, DataLength(@Fischregionen) - 2) Where a_gID = @gID_Cur

	if (ISNULL(@gattung, 'F') = 'F') begin
		-- Anzahl Fischarten (unabhängig von der Hochrechnung)
		Select @Fischanz = (Select Distinct Count(DISTINCT fID) From #t, probestelle, fangprot, fischart Where psID = t_psID And psGebiets_kz = @gID_Cur And fpProbestelle = psID And fID = fpFischart And fGattung = 'F')
		Update #ausgabe set a_Anz_Fisch = @Fischanz Where a_gID = @gID_Cur
	
		-- Fischartenliste:
		Select @Fischarten = ''
		Select @Fischarten = @Fischarten + fBez_deutsch + Case When fGefaehrdung Is Null Then '' Else ' (' + fGefaehrdung + ')' End + ', '
		From #t, probestelle, fangprot, fischart 
		Where psID = t_psID And psGebiets_kz = @gID_Cur And fpProbestelle = psID And fID = fpFischart And fGattung = 'F'
		Group by fBez_deutsch, fGefaehrdung
		Order by fBez_deutsch

		If (@Fischarten <> '') Update #ausgabe Set a_Fischart = Substring(@Fischarten, 1, DataLength(@Fischarten) - 2) Where a_gID = @gID_Cur

		-- Fischbestand kg min.
		Update #ausgabe set a_Fisch_kg_ha_min = (Select Min(t_Sum_kg_ha) From #t, probestelle Where psID = t_psID And psGebiets_kz = @gID_Cur Group by psGebiets_kz) Where a_gID = @gID_Cur
		Update #ausgabe set a_Fisch_kg_ha_max = (Select Max(t_Sum_kg_ha) From #t, probestelle Where psID = t_psID And psGebiets_kz = @gID_Cur Group by psGebiets_kz) Where a_gID = @gID_Cur
	end

	if (ISNULL(@gattung, 'K') = 'K') begin

		-- Krebse, Anzahl:
		Update #ausgabe set a_Anz_Krebs = (Select Distinct Count(DISTINCT fID) From #t, probestelle, fangprot, fischart Where psID = t_psID And psGebiets_kz = @gID_Cur And fpProbestelle = psID And fID = fpFischart And fGattung = 'K') Where a_gID = @gID_Cur
	
		-- Krebsartenliste
		Select @Krebsarten = ''
		Select @Krebsarten = @Krebsarten  +  fBez_deutsch +  ', '
		From #t, probestelle, fangprot, fischart
		Where psID = t_psID And psGebiets_kz = @gID_Cur And fpProbestelle = psID And fID = fpFischart And fGattung = 'K'
		Group by fBez_deutsch
		Order by fBez_deutsch

		If (@Krebsarten <> '') Update #ausgabe Set a_Krebsarten = Substring(@Krebsarten, 1, DataLength(@Krebsarten) - 2) Where a_gID = @gID_Cur

	end

	Fetch Next From GW Into @gID_Cur
End
Close GW
Deallocate GW
--
Update #ausgabe set a_Befischungen = (Select count(*) from #t)
Update #ausgabe set a_Laenge = (Select sum(isnull(t_psGwStrecke_eff, 0)) / 1000. from #t)
--
-- ausgeben:
Select * From #ausgabe Order by a_Gewaesser
-- aufraeumen:
Drop Table #t
drop table #psliste
Drop Table #ausgabe


GO
GRANT EXECUTE ON [dbo].[doc_arteninventar] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[doc_arteninventar] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[doc_arteninventar_nach_gkz]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
/****** Objekt:  Gespeicherte Prozedur dbo.doc_arteninventar_nach_gkz    Skriptdatum: 03.12.01 12:52:47 ******/
CREATE  PROCEDURE [dbo].[doc_arteninventar_nach_gkz]  (
	@nID int,
	@gkz varchar(40), 
	@gID int, 
	@wknr varchar(80),
	@gwtyp char(1),
	@gattung char(1),
	@fID int, 
	@Dat_von DateTime, 
	@Dat_bis DateTime,
	@HR char(1) = 'F'
) AS
/* liefert fuer genau ein gewaesser angaben zu den vorhandenen probestrecken und arten
  history:
  2006-07-30	klopfer: mit Anlass und Fischreg und Erfkat als Suchbegriff
  2007-04-18	klopfer: nun mit @wknr und @gwtyp
  2009-03-02	klopfer: überall varchar(4000)
  2009-04-04	klopfer: befischte Strecke hinzu, TK
  2011-07-02	klopfer: schließt Leereinträge aus ('keine Fische')
  2012-07-23	klopfer: Option @HR
  2015-12-01	klopfer: Arg @psnr auf vc40
  2019-07-01ff.	klopfer: @gkz statt @psnr; @gattung hinzu
  2019-08-02	klopfer: Abschnittsauswahl hinzu
*/

-- konstanten:
declare @MinDate datetime, @MaxDate datetime
select @MinDate = '01.01.1900', @MaxDate = '01.01.3000'

-- variablen:
declare @sql varchar(8000)
declare @zvkxOption char(1), @zvkxListe1 varchar(4000), @zvkxListe2 varchar(4000)
Declare @gID_Cur int
Declare @Probestrecken varchar(4000), @Gemeinden varchar(4000), @Hoehenlagen varchar(4000), @Fischarten varchar(4000), @Fischregionen varchar(4000), @Krebsarten varchar(4000)
Declare @NL char(2)
Select @NL = CHAR(13) + CHAR(10)
Declare @Fischanz int

-- alle betroffenen probestellen bestimmen:
Create Table #t (
	t_psID int Null,
	t_psDatum DateTime Null,
	t_Sum_kg_ha Float Null,
	t_psHoehenlage Float Null,
	t_psFischreg int Null,
	t_psGwStrecke_eff float null
)
--
select @sql = 'insert into #t (t_psID, t_psDatum, t_Sum_kg_ha, t_psHoehenlage, t_psFischreg, t_psGwStrecke_eff) select psID, psDatum, sum(fpGewicht_ha), psHoehenlage, psFischreg, psGwStrecke_eff '
select @sql = @sql + ' From probestelle join fangprot '
select @sql = @sql + ' on psID = fpProbestelle * case when ''' + @HR + ''' = ''T'' and isnull(psHochgerechnet, ''F'') = ''T'' then -1 else 1 end'
select @sql = @sql + ' join gebiets_kz on gID = psGebiets_kz join fischart on fID = fpFischart and fBez_deutsch not like ''%keine %'' '
select @sql = @sql + ' Where 1 = 1 '
if (@gkz is not null) select @sql = @sql + ' and (select gGebiets_kz from gebiets_kz where gID = psGebiets_kz) Like ''' + @gkz + '%'' '
if (@Dat_von is not null) select @sql = @sql + ' and psDatum >= convert(datetime, ''' + convert(varchar(10), @Dat_von, 104) + ''', 104) '
if (@Dat_bis is not null) select @sql = @sql + ' and psDatum <= convert(datetime, ''' + convert(varchar(10), @Dat_bis, 104) + ''', 104) '
if (@wknr is not null) select @sql = @sql + ' and exists(select * from abschnitt join wasserkoerper on aWasserkoerper = wkID where aID = psAbschnitt and (wkNummer like ''' + @wknr + '%'' or wkBezeichnung like ''' + @wknr + '%'')) '
if (@gwtyp is not null) select @sql = @sql + ' and psGwTyp = ''' + @gwtyp + ''' '
if (@gattung is not null) select @sql = @sql + ' and isnull(psGattung, ''F'') = ''' + @gattung + ''' '

-- Abschnitte:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'abschnitte'
if (isnull(@zvkxOption, 'U') not in ('U', 'A')) begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and psAbschnitt in (' + @zvkxListe1 + ') '
end

-- anlaesse:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'anlaesse'
if (@zvkxOption <> 'A') begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and ( psBetreff in (' + @zvkxListe1 + ') or '
  if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @sql = @sql + ' psBetreff is null ) ' else select @sql = @sql + ' 1 = 0 ) '
end
-- fischreg:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'fischreg'
if (@zvkxOption <> 'A') begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and ( psFischreg in (' + @zvkxListe1 + ') or '
  if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @sql = @sql + ' psFischreg is null ) ' else select @sql = @sql + ' 1 = 0 ) '
end
-- erfkat:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'erfkat'
if (@zvkxOption <> 'A') begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and ( psErfass_Kat in (' + @zvkxListe1 + ') or '
  if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @sql = @sql + ' psErfass_Kat is null ) ' else select @sql = @sql + ' 1 = 0 ) '
end
-- TK:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'tk'
if (@zvkxOption <> 'A') begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and ( psTKnr_name in (' + @zvkxListe1 + ') or '
  if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @sql = @sql + ' psTKnr_name is null ) ' else select @sql = @sql + ' 1 = 0 ) '
end
--
select @sql = @sql + ' Group by psID, psDatum, psHoehenlage, psFischreg, psGwStrecke_eff Order by psDatum desc'
exec (@sql)

Create Table #ausgabe
(
a_GKz varchar(20) Null,
a_Probestrecke_anz int Null,
a_Laenge float null,
a_Fischregionen text Null,
a_Hoehe_ab int Null,
a_Hoehe_bis int Null,
a_Datum_von DateTime Null,
a_Datum_bis DateTime Null,
a_Anz_Fisch int Null,
a_Fischarten text Null,
a_Fisch_kg_ha_min float Null,

a_Fisch_kg_ha_max float Null,
a_Anz_Krebs int Null,
a_Krebsarten text Null
)

-- Gebietskennzahl ist ein Teil der Probestellen-Nr.
Insert into #ausgabe (a_GKz) Values (IsNull(@gkz, 'alle'))
-- Anzahl der Befischungspunkte
Update #ausgabe Set a_Probestrecke_anz = (Select Count(*) From #t)
-- befischte Strecke:
Update #ausgabe Set a_Laenge = (Select sum(isnull(t_psGwStrecke_eff, 0)) / 1000. From #t)
-- Höhenlage ab
Update #ausgabe set a_Hoehe_ab = (Select Min(t_psHoehenlage) From #t)
-- Höhenlage bis
Update #ausgabe set a_Hoehe_bis = (Select Max(t_psHoehenlage) From #t)
-- Erfassungszeitraum von
Update #ausgabe set a_Datum_von = (Select Min(t_psDatum) From #t)
-- Erfassungszeitraum bis
Update #ausgabe set a_Datum_bis = (Select Max(t_psDatum) From #t)

-- Liste der Fischregionen:
Select @Fischregionen = ''
Select @Fischregionen = @Fischregionen + kDaten + ', ' 
From #t, probestelle, katalog 
Where kID = psFischreg And psID = t_psID
Group by kDaten, kOrdnung 
Order by kOrdnung, kDaten

If (@Fischregionen <> '') Update #ausgabe Set a_Fischregionen = Substring(@Fischregionen, 1, DataLength(@Fischregionen) - 2)

if (isnull(@gattung, 'F') = 'F') begin
	-- Anzahl Fischarten
	Select @Fischanz = (Select Distinct Count(DISTINCT fID) From #t, fangprot, fischart Where fpProbestelle = t_psID And fID = fpFischart And fGattung = 'F')
	Update #ausgabe set a_Anz_Fisch = @Fischanz

	-- Fischartenliste:
	Select @Fischarten = ''
	Select @Fischarten = @Fischarten + fBez_deutsch + Case When fGefaehrdung Is Null Then '' Else ' (' + fGefaehrdung + ')' End + ', '
	From #t join probestelle on psID = t_psID join fangprot on fpProbestelle = psID join fischart on fID = fpFischart And fGattung = 'F' and fBez_deutsch not like '%keine %'
	Group by fBez_deutsch, fGefaehrdung
	Order by fBez_deutsch

	If (@Fischarten <> '') Update #ausgabe Set a_Fischarten = Substring(@Fischarten, 1, DataLength(@Fischarten) - 2)

	-- Fischbestand kg min.
	Update #ausgabe set a_Fisch_kg_ha_min = (Select Min(t_Sum_kg_ha) From #t)
	Update #ausgabe set a_Fisch_kg_ha_max = (Select Max(t_Sum_kg_ha) From #t)
end

if (isnull(@gattung, 'K') = 'K') begin
	-- Anzahl Krebsarten
	Update #ausgabe set a_Anz_Krebs = (Select Distinct Count(DISTINCT fID) From #t, fangprot, fischart Where fpProbestelle = t_psID And fID = fpFischart And fGattung = 'K')

	-- Krebsartenliste
	Select @Krebsarten = ''
	Select @Krebsarten = @Krebsarten  +  fBez_deutsch +  ', '
	From #t, probestelle, fangprot, fischart
	Where psID = t_psID And fpProbestelle = psID And fID = fpFischart And fGattung = 'K'
	Group by fBez_deutsch
	Order by fBez_deutsch

	If (@Krebsarten <> '') Update #ausgabe Set a_Krebsarten = Substring(@Krebsarten, 1, DataLength(@Krebsarten) - 2)
end

-- Ausgabe:
Select * From #ausgabe

Drop Table #t
Drop Table #ausgabe
GO
GRANT EXECUTE ON [dbo].[doc_arteninventar_nach_gkz] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[doc_arteninventar_nach_gkz] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[doc_bewertung]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[doc_bewertung] (@nID int) AS
/* history:
  2008-10-04	klopfer: erstellt
  2010-03-22	klopfer: Ordnung nach aOrdnung
  2010-03-30	klopfer: Ausgabe aOrdnung
  2012-07-23	klopfer: HMWB hinzu
  2014-03-26	klopfer: ohne Klammer nach where
*/
--
declare @sql varchar(4000), @where varchar(4000), @ps varchar(4000)
--
select @sql = '
SELECT 
	case when bID is null then ''F'' else ''T'' end as Checked,
	gGewaesser,   
        	wkBezeichnung,   
        	''DESN_'' + wkNummer as OWKID,   
    aOrdnung,
	aBezeichnung,   
	aHMWB,
	bDatum,   
	k2.kDaten as Gesamtpraedikat,  
	k2.kFarbe as Gesamtfarbe,
    gbNote,
	bNote,
	bNachbefischen,   
	bAnmerkungen,   
	k1.kFarbe as Farbe,
	wkID, aID, gbID, bID
FROM 	abschnitt join wasserkoerper on wkID = aWasserkoerper join gebiets_kz on gID = wkGebietsKz
	LEFT OUTER JOIN bewertung ON aID = bAbschnitt left outer join gesamtbewertung ON bGesamtbewertung = gbID and wkID = gbWasserkoerper
	LEFT OUTER JOIN katalog k1 ON bPraedikat = k1.kID
	LEFT OUTER JOIN katalog k2 ON gbPraedikat = k2.kID
'
-- where -Klausel aus dem Kontext holen:
select @where = zvkxListe1 from zv_kontextX where zvkxBenutzer = @nID and lower(zvkxTyp) = lower('doc_bewertung')
select @where = replace(@where, '~', '')
--
select @sql = @sql + ' where ' + @where
select @sql = @sql + ' order by gGewaesser, wkBezeichnung, aOrdnung, aBezeichnung, bDatum'
exec (@sql)
--


GO
GRANT EXECUTE ON [dbo].[doc_bewertung] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[doc_bewertung] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[doc_bewertungsstatistik_gebiete]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE  PROCEDURE [dbo].[doc_bewertungsstatistik_gebiete] (@nID int = 0) AS
/* history:
  2008-10-10	klopfer: erstellt
  2008-10-17	klopfer: Anteile nach OWK, nicht nach Abschnitten
  2008-10-27	klopfer: Korrektur bei der Einschraenkung nach Kreisen
  2014-02-28	zaehlt nun die Anzahl der Prädikate  
*/
--
declare @ctPraed int
declare @sql varchar(4000)
declare @where_bewertung varchar(1000), @where_bewertungX1 varchar(1000)
declare @where_gewaesser varchar(1000)
declare @where_gemeinde varchar(1000), @where_gemeindeX1 varchar(1000), @where_gemeindeX2 varchar(1000), @where_gemeindeX3 varchar(1000)
declare @tab varchar(255), @ps varchar(4000)
--
-- Praedikate zaehlen:
select @ctPraed = COUNT(*) from katalog where kKatalogart = 'bewpraed'

-- where-Klauseln aus dem Kontext holen:
select @where_bewertung = zvkxListe1 from zv_kontextX where zvkxBenutzer = @nID and lower(zvkxTyp) = lower('doc_bewertungsstatistik_bewertung')
if (isnull(@where_bewertung, '') <> '') begin
	select @where_bewertung = replace(@where_bewertung, '~', '''')
	select @where_bewertungX1 = ' and exists(select 1 from gesamtbewertung where gbWasserkoerper = wkID ' + @where_bewertung + ') '
end
else begin
	select @where_bewertung = ''  select @where_bewertungX1 = ''
end
--
select @where_gewaesser = zvkxListe1 from zv_kontextX where zvkxBenutzer = @nID and lower(zvkxTyp) = lower('doc_bewertungsstatistik_gewaesser')
select @where_gewaesser = replace(@where_gewaesser, '~', '''')
--
select @where_gemeinde = zvkxListe1 from zv_kontextX where zvkxBenutzer = @nID and lower(zvkxTyp) = lower('doc_bewertungsstatistik_gemeinde')
if (isnull(@where_gemeinde, '') <> '') begin
	select @where_gemeinde = replace(@where_gemeinde, '~', '''')
	select @where_gemeindeX1 = ' and exists(select 1 from abschnitt join bewertung on aID = bAbschnitt join ps2b on ps2bBewertung = bID join probestelle on psID = ps2bProbestelle join gemeinde on gemID = psGemeinde where aWasserkoerper = wkID ' + @where_gemeinde + ') '
	select @where_gemeindeX2 = ' and exists(select 1 from bewertung join ps2b on ps2bBewertung = bID join probestelle on psID = ps2bProbestelle join gemeinde on gemID = psGemeinde where bAbschnitt = aID ' + @where_gemeinde + ') '
	select @where_gemeindeX3 = ' and exists(select 1 from ps2b join probestelle on psID = ps2bProbestelle join gemeinde on gemID = psGemeinde where ps2bBewertung = bID ' + @where_gemeinde + ') '
end
else begin
	select @where_gemeinde = ''  select @where_gemeindeX1 = ''  select @where_gemeindeX2 = ''  select @where_gemeindeX3 = ''
end
--
select @tab = '[##t_' + ltrim(str(@nID)) + ']'
--
select @sql = '
create table ' + @tab + ' (
	Gebiet varchar(255) null,
	AnzahlOWK int null,
	AnzahlAbschnitte int null,
	Masz varchar(10) null,
	P1 decimal(5, 1) null,
	P2 decimal(5, 1) null,
	P3 decimal(5, 1) null,
	P4 decimal(5, 1) null,
	P5 decimal(5, 1) null,
	P6 decimal(5, 1) null,
	P1color int null,
	P2color int null,
	P3color int null,
	P4color int null,
	P5color int null,
	P6color int null,
	WKMuster varchar(255) null,
	gtID int null,
	Ordnung1 int null,
	Ordnung2 int null
)'
exec (@sql)
--
-- fuer alle Gebiete jeweils eine Zeile für absolute und Prozentwerte:
select @sql = 'insert into  ' + @tab + ' (Gebiet, WKMuster, gtID, Masz, P1, P2, P3, P4, P5, Ordnung1, Ordnung2) select gtBezeichnung, gtWKMuster, gtID, ''abs'', 0, 0, 0, 0, 0, 1, 1 from gebiet'
select @sql = @sql + ' insert into  ' + @tab + ' (Gebiet, WKMuster, gtID, Masz, P1, P2, P3, P4, P5, Ordnung1, Ordnung2) select gtBezeichnung, gtWKMuster, gtID, ''%'', 0, 0, 0, 0, 0, 1, 2 from gebiet'
exec (@sql)
--
-- Berechnung der Anzahlen:
select @sql = '
	declare @sql varchar(4000), @gtID int, @WKMuster varchar(255), @ct int
	declare gtCur cursor for select gtID, WKMuster from ' + @tab + '
	open gtCur
	fetch next from gtCur into @gtID, @WKMuster
	while (@@fetch_status <> -1) begin
		-- Anzahl der OWK und Abschnitte:
		select @sql = ''update ' + @tab + ' set AnzahlOWK = (select count(distinct wkID) from wasserkoerper join gebiets_kz on gID = wkGebietsKz where exists(select 1 from gesamtbewertung where gbWasserkoerper = wkID and gbPraedikat is not null) and ('' + @WKMuster + '') ' + @where_gewaesser + @where_bewertungX1 + @where_gemeindeX1 + ' ) where gtID = '' + str(@gtID)
		select @sql = @sql + '' update ' + @tab + ' set AnzahlAbschnitte = (select count(distinct aID) from abschnitt join wasserkoerper on aWasserkoerper = wkID join gebiets_kz on gID = wkGebietsKz where exists(select 1 from gesamtbewertung where gbWasserkoerper = wkID and gbPraedikat is not null) and ('' + @WKMuster + '') ' + @where_gewaesser + @where_bewertungX1 + @where_gemeindeX2 + ' ) where Ordnung2 = 1 and gtID = '' + str(@gtID)
		exec(@sql)
		-- absolute Anzahl der Bewertungen nach Praedikaten:
		select @ct = 1
		while (@ct <= ' + STR(@ctPraed) + ') begin
			select @sql = ''update ' + @tab + ' set P'' + ltrim(str(@ct)) + '' = (select count(*) from wasserkoerper join gebiets_kz on gID = wkGebietsKz join gesamtbewertung on wkID = gbWasserkoerper where dbo.f_Index4Note(gbNote) = '' + str(@ct) + '' and ('' + @WKMuster + '') ' + @where_gewaesser + @where_bewertung + @where_gemeindeX1 + ') where Ordnung2 = 1 and gtID = '' + str(@gtID)
			exec(@sql)
			select @ct = @ct + 1 
		end
		fetch next from gtCur into @gtID, @WKMuster
	end
	close gtCur
	deallocate gtCur
	-- prozentuale Anzahl der Bewertungen und Darstellungsfarbe:
	select @ct = 1
	while (@ct <= ' + STR(@ctPraed) + ') begin
		select @sql = ''update ' + @tab + ' set P'' + ltrim(str(@ct)) + '' = (select (100 * cast(P'' + ltrim(str(@ct)) + '' as float)) / cast(AnzahlOWK as float) from ' + @tab + ' a where Ordnung2 = 1 and a.gtID = ' + @tab + '.gtID and isnull(AnzahlOWK, 0) > 0) where Ordnung2 = 2 and isnull(AnzahlOWK, 0) > 0''
		exec(@sql)
		select @ct = @ct + 1 
	end
'
exec (@sql)
--
-- jeweils eine Zeile für den absoluten und prozentualen Gesamtwert:
select @sql = 'insert into  ' + @tab + ' (Gebiet, Masz, Ordnung1, Ordnung2) values(''Summe'', ''abs'', 2, 1)'
select @sql = @sql + ' insert into  ' + @tab + ' (Gebiet, Masz, Ordnung1, Ordnung2) values(''Summe'', ''%'', 2, 2)'
exec (@sql)
--
select @sql = 'update ' + @tab + ' set AnzahlOWK = (select sum(AnzahlOWK) from ' + @tab + ' d where d.Ordnung1 = 1 and d.Ordnung2 = 1) where Ordnung1 = 2'
select @sql = @sql + ' update ' + @tab + ' set AnzahlAbschnitte = (select sum(AnzahlAbschnitte) from ' + @tab + ' d where d.Ordnung1 = 1 and d.Ordnung2 = 1) where Ordnung1 = 2 and Ordnung2 = 1'
exec (@sql)
--
-- Summenberechnung, Farben:
select @sql = '
	declare @ct int, @sql varchar(4000)
	select @ct = 1
	while (@ct <= ' + STR(@ctPraed) + ') begin
		select @sql = ''update ' + @tab + ' set P'' + ltrim(str(@ct)) + '' = (select sum(P'' + ltrim(str(@ct)) + '') from ' + @tab + ' d where d.Ordnung1 = 1 and d.Ordnung2 = 1) where Ordnung1 = 2 and Ordnung2 = 1''
		select @sql = @sql + ''update ' + @tab + ' set P'' + ltrim(str(@ct)) + '' = (select (100 * cast(P'' + ltrim(str(@ct)) + '' as float)) / cast(AnzahlOWK as float) from ' + @tab + ' d where d.Ordnung1 = 2 and d.Ordnung2 = 1) where Ordnung1 = 2 and Ordnung2 = 2''
		select @sql = @sql + '' update ' + @tab + ' set P'' + ltrim(str(@ct)) + ''color = dbo.f_Farbe4Index('' + str(@ct) + '')''
		exec(@sql)
		select @ct = @ct + 1 
	end
'
exec (@sql)
--
select @sql = 'select * from ' + @tab + ' order by Ordnung1, Gebiet, Ordnung2'
exec (@sql)
--
select @sql = 'drop table '+ @tab
exec(@sql)
--


GO
GRANT EXECUTE ON [dbo].[doc_bewertungsstatistik_gebiete] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[doc_bewertungsstatistik_gebiete] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[doc_bewertungsstatistik_total]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[doc_bewertungsstatistik_total] (@nID int = 0) AS
/* history:
  2008-10-10	klopfer: erstellt
  2014-02-28	zaehlt nun die Anzahl der Prädikate
*/
--
declare @ct int, @ctPraed int
declare @sql varchar(4000)
declare @where_bewertung varchar(1000)
declare @where_gewaesser varchar(1000)
declare @where_gemeinde varchar(1000), @where_gemeindeX1 varchar(1000)
declare @tab varchar(255), @ps varchar(4000)
--
-- Praedikate zaehlen:
select @ctPraed = COUNT(*) from katalog where kKatalogart = 'bewpraed'

-- where-Klauseln aus dem Kontext holen:
select @where_bewertung = zvkxListe1 from zv_kontextX where zvkxBenutzer = @nID and lower(zvkxTyp) = lower('doc_bewertungsstatistik_bewertung')
if (isnull(@where_bewertung, '') <> '') select @where_bewertung = replace(@where_bewertung, '~', '') else select @where_bewertung = ''
--
select @where_gewaesser = zvkxListe1 from zv_kontextX where zvkxBenutzer = @nID and lower(zvkxTyp) = lower('doc_bewertungsstatistik_gewaesser')
select @where_gewaesser = replace(@where_gewaesser, '~', '''')
--
select @where_gemeinde = zvkxListe1 from zv_kontextX where zvkxBenutzer = @nID and lower(zvkxTyp) = lower('doc_bewertungsstatistik_gemeinde')
if (isnull(@where_gemeinde, '') <> '') begin
	select @where_gemeinde = replace(@where_gemeinde, '~', '')
	select @where_gemeindeX1 = ' and exists(select 1 from bewertung join ps2b on ps2bBewertung = bID join probestelle on psID = ps2bProbestelle join gemeinde on gemID = psGemeinde where bGesamtbewertung = gbID ' + @where_gemeinde + ') '
end
else begin
	select @where_gemeinde = ''  select @where_gemeindeX1 = ''
end
--
select @tab = '[##t_' + ltrim(str(@nID)) + ']'
--
select @sql = '
create table ' + @tab + ' (
	Praedikat varchar(255) null,
	AnzahlOWKabs int null,
	AnzahlOWKrel decimal(5, 1) null,
	AnzahlPS int null,
	Strecke int null,
	Farbe int null,
	Ix int null,
	Ordnung1 int null
)'
exec (@sql)
--
-- Gesamtzahl der OWK einfügen:
select @sql = 'insert into  ' + @tab + ' (Praedikat, AnzahlOWKabs, AnzahlOWKrel, Ix, Ordnung1) select ''Gesamtanzahl'', count(distinct wkID), 100, 0, 2 from wasserkoerper join gebiets_kz on wkGebietsKz = gID join gesamtbewertung on wkID = gbWasserkoerper where 1 = 1 ' + @where_bewertung + @where_gewaesser + @where_gemeindeX1
exec (@sql)
--
-- Anzahl der OWK nach Praedikat einfügen:
select @ct = 1
while (@ct <= @ctPraed) begin
	select @sql = '
		declare @wkAnzahl int
		select @wkAnzahl = AnzahlOWKabs from ' + @tab + ' where Ix = 0 
		if (isnull(@wkAnzahl, 0) = 0) select @wkAnzahl = 1
		insert into  ' + @tab + ' (Praedikat, AnzahlOWKabs, AnzahlOWKrel, Farbe, Ix, Ordnung1) select dbo.f_Praedikat4Index(' + str(@ct) + '), count(*), 100 * cast(count(*) as float) / @wkAnzahl, dbo.f_Farbe4Index(' + str(@ct) + '), ' + str(@ct) + ', 1 from wasserkoerper join gebiets_kz on gID = wkGebietsKz join gesamtbewertung on wkID = gbWasserkoerper where dbo.f_Index4Note(gbNote) = ' + str(@ct) + ' ' + @where_bewertung + @where_gewaesser + @where_gemeindeX1
	exec (@sql)
	select @ct = @ct + 1
end
--
-- Anzahl Probestellen nach Praedikat berechnen:
select @ct = 1
while (@ct <= @ctPraed) begin
	select @sql = 'update  ' + @tab + ' set AnzahlPS = (select count(*) from wasserkoerper join gebiets_kz on gID = wkGebietsKz join gesamtbewertung on wkID = gbWasserkoerper join bewertung on bGesamtbewertung = gbID join ps2b on ps2bBewertung = bID where dbo.f_Index4Note(gbNote) = ' + str(@ct) + ' ' + @where_bewertung + @where_gewaesser + @where_gemeindeX1 + ') where Ix = ' + str(@ct)
	exec (@sql)
	select @ct = @ct + 1
end
--
-- Strecke nach Praedikat berechnen:
select @ct = 1
while (@ct <= @ctPraed) begin
	select @sql = 'update  ' + @tab + ' set Strecke = (select sum(psGwStrecke_eff) from wasserkoerper join gebiets_kz on gID = wkGebietsKz join gesamtbewertung on wkID = gbWasserkoerper join bewertung on bGesamtbewertung = gbID join ps2b on ps2bBewertung = bID join probestelle on psID = ps2bProbestelle where dbo.f_Index4Note(gbNote) = ' + str(@ct) + ' ' + @where_bewertung + @where_gewaesser + @where_gemeindeX1 + ') where Ix = ' + str(@ct)
	exec (@sql)
	select @ct = @ct + 1
end
--

-- Gesamtzahl Probestellen und Strecke berechnen:
select @sql = 'update ' + @tab + ' set Strecke = 0 where Strecke is null'
exec (@sql)
-- 
select @sql = 'update  ' + @tab + ' set AnzahlPS = (select sum(AnzahlPS) from ' + @tab + ' where Ordnung1 = 1) where Ordnung1 = 2'
exec (@sql)
select @sql = 'update  ' + @tab + ' set Strecke = (select sum(Strecke) from ' + @tab + ' where Ordnung1 = 1) where Ordnung1 = 2'
exec (@sql)
--
select @sql = 'select * from ' + @tab + ' order by Ordnung1, Ix'
exec (@sql)
--
select @sql = 'drop table '+ @tab
exec(@sql)
--


GO
GRANT EXECUTE ON [dbo].[doc_bewertungsstatistik_total] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[doc_bewertungsstatistik_total] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[doc_einzelartennachweis]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
--
CREATE   PROCEDURE [dbo].[doc_einzelartennachweis] (
	@nID int,
	@gkz varchar(40), 
	@gID int, 
	@wknr varchar(80),
	@gwtyp char(1),
	@gattung char(1), -- blind (hier wird die Einzelart ausgewertet)
	@fID int, 
	@Dat_von DateTime, 
	@Dat_bis DateTime,
	@HR char(1) = 'F'
) AS
/* liefert einen einzelartennachweis
  history:
  2005-02-24	keyn: ueberarbeitet; nun mehrfachauswahl landkreise und gemeinden (ursprung: fritsche)
  2006-07-30	klopfer: gruppe 0<2 einbezogen; mit Anlass und Fischreg und Erfkat als Suchbegriff
  2006-10-07	klopfer: neue Felder Anzahl der Befischungen und Anzahl der Gewässer
  2007-04-18	klopfer: mit wknr und gwtyp
  2009-03-02	klopfer: überall varchar(4000)
  2009-04-04	klopfer: befischte Strecke hinzu
  2012-07-23	klopfer: Option @HR
  2012-12-28	klopfer: mit f_psMultigroup
  2015-12-01	klopfer: Arg und Feld Probestellennr auf vc40
  2019-07-01ff.	klopfer: @gkz statt @psnr; @gattung hinzu; psNummer
  2019-08-02	klopfer: Abschnittsauswahl hinzu
*/

-- konstanten:
declare @MinDate datetime, @MaxDate datetime
select @MinDate = '01.01.1900', @MaxDate = '01.01.3000'
-- variablen:
declare @sql varchar(4000)
declare @zvkxOptionGemeinden char(1), @zvkxListe1Gemeinden varchar(4000), @zvkxOptionLandkreise char(1), @zvkxListe1Landkreise varchar(4000), @zvkxListe2Landkreise varchar(4000)
declare @zvkxOption char(1), @zvkxListe1 varchar(4000), @zvkxListe2 varchar(4000)
Declare @psID int
Declare @Count int
Declare @multi_gr varchar(5)

-- Ausgabetabelle definieren:
Create Table #ausgabe
(
a_psID int Null,
a_psNummer varchar(40) Null,
a_Fischart varchar(80) Null,
a_Datum_von DateTime Null,
a_Datum_bis DateTime Null,
a_Befischungen int null,
a_Laenge float null,
a_Anz_Gewaesser int null,
a_Gewaesser varchar(80) Null,
a_Datum_ps DateTime Null,
a_Probestrecke varchar(4000) Null,
a_Laenge_ps float null,
a_Stueck int Null,
a_Fischreg varchar(40) Null,
a_Fischreg_order int Null,
a_Hoehe int Null,
a_multi_group varchar(5) Null,
a_psHochgerechnet char(1) null
)

-- Ausgabetabelle laden:
select @sql = ''
select @sql = @sql + 'Insert Into #ausgabe (a_psID, a_psNummer, a_Datum_ps, a_Probestrecke, a_Hoehe, a_Laenge_ps, a_psHochgerechnet) '
select @sql = @sql + ' Select psID, psNummer, psDatum, psProbestrecke, psHoehenlage, psGwStrecke_eff, psHochgerechnet'
select @sql = @sql + ' From probestelle join gebiets_kz on gID = psGebiets_kz join gemeinde on gemID = psGemeinde join fangprot '
select @sql = @sql + ' on psID = fpProbestelle * case when ''' + @HR + ''' = ''T'' and isnull(psHochgerechnet, ''F'') = ''T'' then -1 else 1 end'
select @sql = @sql + ' join fischart on fID = fpFischart '
select @sql = @sql + ' Where 1 = 1 '
if (@fID is not null) select @sql = @sql + 'and isnull(fID, -1)  = ' + ltrim(str(@fID)) + ' ' 
if (@gkz is not null) select @sql = @sql + ' and (select gGebiets_kz from gebiets_kz where gID = psGebiets_kz) Like ''' + @gkz + '%'' '
if (@gID is not null) select @sql = @sql + 'and isnull(psGebiets_kz, -1)  = ' + ltrim(str(@gID)) + ' ' 
if (@Dat_von is not null) select @sql = @sql + ' and psDatum >= convert(datetime, ''' + convert(varchar(10), @Dat_von, 104) + ''', 104) '
if (@Dat_bis is not null) select @sql = @sql + ' and psDatum <= convert(datetime, ''' + convert(varchar(10), @Dat_bis, 104) + ''', 104) '
if (@wknr is not null) select @sql = @sql + ' and exists(select * from abschnitt join wasserkoerper on aWasserkoerper = wkID where aID = psAbschnitt and (wkNummer like ''' + @wknr + '%'' or wkBezeichnung like ''' + @wknr + '%'')) '
if (@gwtyp is not null) select @sql = @sql + ' and psGwTyp = ''' + @gwtyp + ''' '
--if (@gattung is not null) select @sql = @sql + ' and isnull(psGattung, ''F'') = ''' + @gattung + ''' '

select @zvkxOptionLandkreise = zvkxOption, @zvkxListe1Landkreise = convert(varchar(4000), zvkxListe1), @zvkxListe2Landkreise = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'landkreise'
if (@zvkxOptionLandkreise = 'A') select @zvkxListe2Landkreise = 'alle'
select @zvkxOptionGemeinden = zvkxOption, @zvkxListe1Gemeinden = convert(varchar(4000), zvkxListe1) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'gemeinden'
if (right(@zvkxListe1Gemeinden, 1) = ',') select @zvkxListe1Gemeinden = substring(@zvkxListe1Gemeinden, 1, datalength(@zvkxListe1Gemeinden) - 1)
if (isnull(@zvkxOptionGemeinden, 'K') = 'K') 
  select @sql = @sql + ' and 1 = 0 '
else 
  if (isnull(@zvkxOptionGemeinden, 'K') = 'A')  and (isnull(@zvkxOptionLandkreise, 'K') = 'A')
    select @sql = @sql + ''
  else
    select @sql = @sql + ' and psGemeinde in (' + @zvkxListe1Gemeinden + ') '

-- Abschnitte:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'abschnitte'
if (isnull(@zvkxOption, 'U') not in ('U', 'A')) begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and psAbschnitt in (' + @zvkxListe1 + ') '
end

-- anlaesse:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'anlaesse'
if (@zvkxOption <> 'A') begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and ( psBetreff in (' + @zvkxListe1 + ') or '
  if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @sql = @sql + ' psBetreff is null ) ' else select @sql = @sql + ' 1 = 0 ) '
end
-- fischreg:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'fischreg'
if (@zvkxOption <> 'A') begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and ( psFischreg in (' + @zvkxListe1 + ') or '
  if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @sql = @sql + ' psFischreg is null ) ' else select @sql = @sql + ' 1 = 0 ) '
end
-- erfkat:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'erfkat'
if (@zvkxOption <> 'A') begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and ( psErfass_Kat in (' + @zvkxListe1 + ') or '
  if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @sql = @sql + ' psErfass_Kat is null ) ' else select @sql = @sql + ' 1 = 0 ) '
end
-- TK:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'tk'
if (@zvkxOption <> 'A') begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and ( psTKnr_name in (' + @zvkxListe1 + ') or '
  if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @sql = @sql + ' psTKnr_name is null ) ' else select @sql = @sql + ' 1 = 0 ) '
end


select @sql = @sql + ' Group by psID, psNummer, psDatum, psProbestrecke, psHoehenlage, psGwStrecke_eff, psHochgerechnet'
exec (@sql)

-- weitere Angaben:
Update #ausgabe Set a_Fischart = (select fBez_deutsch From fischart Where fID = @fID)
Update #ausgabe Set a_Datum_von = (Select Min(psDatum) From probestelle Where Exists(select * From #ausgabe Where a_psID = psID)) 
Update #ausgabe Set a_Datum_bis = (Select Max(psDatum) From probestelle Where Exists(select * From #ausgabe Where a_psID = psID))

Update #ausgabe Set a_Gewaesser = gGewaesser From probestelle, gebiets_kz Where psID = a_psID And gID = psGebiets_kz
if (@HR = 'T')
	Update #ausgabe Set a_Stueck = (Select Sum(fpAnz_ges) From fangprot Where fpProbestelle = a_psID * case when isnull(a_psHochgerechnet, 'F') = 'T' then -1 else 1 end And fpFischart = @fID)
else
	Update #ausgabe Set a_Stueck = (Select Sum(fpAnz_ges) From fangprot Where fpProbestelle = a_psID And fpFischart = @fID)
Update #ausgabe Set a_Fischreg = kDaten, a_Fischreg_order = IsNull(kOrdnung, 0) From probestelle, katalog Where psID = a_psID And kID = psFischreg

-- Feststellung, ob mehrere Groessengruppen vorhanden sind: (diese Frage ist unabhängig davon, ob Hochrechnungen vorliegen)
Update #ausgabe Set a_multi_group = 'Nein'
Update #ausgabe Set a_multi_group = 'Ja' where dbo.f_psMultigroup(a_psID, @fID) = 1
--
update #ausgabe set a_Befischungen = (select count(*) from #ausgabe)
update #ausgabe set a_Laenge = (select sum(isnull(a_Laenge_ps, 0)) / 1000. from #ausgabe)
update #ausgabe set a_Anz_Gewaesser = (select count(distinct a_Gewaesser) from #ausgabe)
--
-- ausgabe:
Select * From #ausgabe Order by  a_Gewaesser, a_Fischreg_order, a_Hoehe desc
-- aufraeumen:
Drop Table #ausgabe


GO
GRANT EXECUTE ON [dbo].[doc_einzelartennachweis] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[doc_einzelartennachweis] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[doc_fangmassenverteilung]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
--
CREATE    PROCEDURE [dbo].[doc_fangmassenverteilung] (
	@nID int,
	@gkz varchar(20), -- blind 
	@gID int, 
	@wknr varchar(80),
	@gwtyp char(1),
	@gattung char(1),
	@fID int, 
	@Dat_von DateTime, 
	@Dat_bis DateTime,
	@HR char(1) = 'F',
	@rs int
) AS
/* fangmassenverteilung - nur wiss. Fangprotokolle; deckblatt und Details
  history:
  2002-10-01	keyn: der ausgabezeitbereich ist nun der uebergebene abfragezeitbereich; wenn nicht angegeben, dann das datum der aeltesten und der juengsten probestrecke
  2005-02-24	keyn: ueberarbeitet; mehrfachauswahl kreise und gemeinden
  2006-07-30	klopfer: neue Größengruppe 0<2 integriert; Suchbegriff Anlaesse und Fischreg und Erfkat
  2006-09-18	klopfer: verhindert div0; neues Feld Anzahl der Befischungen
  2007-04-18	klopfer: mit wknr und gwtyp
  2009-03-02	klopfer: überall varchar(4000)
  2009-04-04	klopfer: befischte Strecke hinzu
  2010-02-14	klopfer: @rs hinzu
  2012-07-23	klopfer: Option @HR (hier nur blind, da bei wiss. FP keine Hochrechnung existiert)
  2019-07-07	klopfer: @gattung hinzu
  2019-08-02	klopfer: Abschnittsauswahl hinzu
*/

-- konstanten:
declare @MinDate datetime, @MaxDate datetime
select @MinDate = '01.01.1900', @MaxDate = '01.01.3000'
-- variablen:
declare @sql varchar(8000)
declare @zvkxOptionGemeinden char(1), @zvkxListe1Gemeinden varchar(4000), @zvkxOptionLandkreise char(1), @zvkxListe1Landkreise varchar(4000), @zvkxListe2Landkreise varchar(4000)
declare @zvkxOption char(1), @zvkxListe1 varchar(4000), @zvkxListe2 varchar(4000)
Declare @Probestrecken varchar(4000), @Gemeinden varchar(4000), @Hoehenlagen varchar(4000), @Fischregionen varchar(4000), @Fischarten varchar(4000)
declare @Fischanz int
Declare @NL char(2)
Select @NL = CHAR(13) + CHAR(10)

-- betroffenen Probestellen:
Create Table #t (
	t_psID int Null,
	t_psDatum DateTime Null,
	t_Sum_kg_ha Float Null,
	t_psHoehenlage Float Null,
	t_psGwStrecke_eff float null,
	t_psHochgerechnet char(1) null
)

select @sql = 'insert into #t (t_psID, t_psDatum, t_Sum_kg_ha, t_psHoehenlage, t_psGwStrecke_eff, t_psHochgerechnet) '
select @sql = @sql + ' select psID, psDatum, sum(fpGewicht_ha), psHoehenlage, psGwStrecke_eff, psHochgerechnet '
select @sql = @sql + ' From probestelle join gebiets_kz on gID = psGebiets_kz join gemeinde on gemID = psGemeinde join fangprot '
select @sql = @sql + ' on psID = fpProbestelle * case when ''' + @HR + ''' = ''T'' and isnull(psHochgerechnet, ''F'') = ''T'' then -1 else 1 end'
select @sql = @sql + ' join fischart on fID = fpFischart '
select @sql = @sql + ' Where fpGewicht_ges is not null And IsNull(psFangprot_wiss, ''F'') = ''T'' '
if (@gattung is not null) select @sql = @sql + ' and fGattung = ''' + @gattung + ''' '
if (@gID is not null) select @sql = @sql + 'and isnull(psGebiets_kz, -1)  = ' + ltrim(str(@gID)) + ' ' 
if (@Dat_von is not null) select @sql = @sql + ' and psDatum >= convert(datetime, ''' + convert(varchar(10), @Dat_von, 104) + ''', 104) '
if (@Dat_bis is not null) select @sql = @sql + ' and psDatum <= convert(datetime, ''' + convert(varchar(10), @Dat_bis, 104) + ''', 104) '
if (@fID is not null) select @sql = @sql + 'and isnull(fID, -1)  = ' + ltrim(str(@fID)) + ' ' 
if (@gwtyp is not null) select @sql = @sql + ' and psGwTyp = ''' + @gwtyp + ''' '
if (@gattung is not null) select @sql = @sql + ' and isnull(psGattung, ''F'') = ''' + @gattung + ''' '


select @zvkxOptionLandkreise = zvkxOption, @zvkxListe1Landkreise = convert(varchar(4000), zvkxListe1), @zvkxListe2Landkreise = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'landkreise'
if (@zvkxOptionLandkreise = 'A') select @zvkxListe2Landkreise = 'alle'
select @zvkxOptionGemeinden = zvkxOption, @zvkxListe1Gemeinden = convert(varchar(4000), zvkxListe1) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'gemeinden'
if (right(@zvkxListe1Gemeinden, 1) = ',') select @zvkxListe1Gemeinden = substring(@zvkxListe1Gemeinden, 1, datalength(@zvkxListe1Gemeinden) - 1)
if (isnull(@zvkxOptionGemeinden, 'K') = 'K') 
  select @sql = @sql + ' and 1 = 0 '
else 
  if (isnull(@zvkxOptionGemeinden, 'K') = 'A')  and (isnull(@zvkxOptionLandkreise, 'K') = 'A')
    select @sql = @sql + ''
  else
    select @sql = @sql + ' and psGemeinde in (' + @zvkxListe1Gemeinden + ') '

-- Abschnitte:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'abschnitte'
if (isnull(@zvkxOption, 'U') not in ('U', 'A')) begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and psAbschnitt in (' + @zvkxListe1 + ') '
end

-- anlaesse:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'anlaesse'
if (@zvkxOption <> 'A') begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and ( psBetreff in (' + @zvkxListe1 + ') or '
  if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @sql = @sql + ' psBetreff is null ) ' else select @sql = @sql + ' 1 = 0 ) '
end
-- fischreg:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'fischreg'
if (@zvkxOption <> 'A') begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and ( psFischreg in (' + @zvkxListe1 + ') or '
  if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @sql = @sql + ' psFischreg is null ) ' else select @sql = @sql + ' 1 = 0 ) '
end
-- erfkat:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'erfkat'
if (@zvkxOption <> 'A') begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and ( psErfass_Kat in (' + @zvkxListe1 + ') or '
  if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @sql = @sql + ' psErfass_Kat is null ) ' else select @sql = @sql + ' 1 = 0 ) '
end
-- TK:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'tk'
if (@zvkxOption <> 'A') begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and ( psTKnr_name in (' + @zvkxListe1 + ') or '
  if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @sql = @sql + ' psTKnr_name is null ) ' else select @sql = @sql + ' 1 = 0 ) '
end
--
select @sql = @sql + ' Group by psID, psDatum, psHoehenlage, psGwStrecke_eff, psHochgerechnet order by psDatum desc'
exec (@sql)

-- definition der ausgabetabellen:
-- Details:
Create Table #ausgabe_daten(
a_Gewaesser varchar(80) Null,
a_fID int Null,
a_Fischart varchar(80) Null,
a_Fischart_lat varchar(80) Null,
a_Fischart_kuerzel varchar(10) Null,
a_Anz_0_2 int Null,
a_Anz_1_4 int Null,
a_Anz_5_9 int Null,
a_Anz_10_14 int Null,
a_Anz_15_19 int Null,
a_Anz_20_24 int Null,
a_Anz_25_29 int Null,
a_Anz_30_39 int Null,
a_Anz_40_49 int Null,
a_Anz_50_59 int Null,
a_Anz_60_69 int Null,
a_Anz_70_n int Null,
a_Anz_ges int Null,		-- einer Fischart
a_Prozent_anz_2_alle float Null,	-- Prozent Anzahl zu allen Fischen (a_Fisch_St_ges)
a_Gewicht_ges float Null,	-- einer Fischart
a_Prozent_kg_2_alle float Null,	-- Prozent Gewicht zu allen Fischen (a_Fisch_kg_ges)
a_L_H_0_2 float Null,
a_L_H_1_4 float Null,
a_L_H_5_9 float Null,
a_L_H_10_14 float Null,
a_L_H_15_19 float Null,
a_L_H_20_24 float Null,
a_L_H_25_29 float Null,
a_L_H_30_39 float Null,
a_L_H_40_49 float Null,
a_L_H_50_59 float Null,
a_L_H_60_69 float Null,
a_L_H_70_n float Null
)

-- Deckblatt:
Create Table #ausgabe_deck(
a_Gewaesser varchar(80) Null,
a_Probestrecken text Null,
a_Gemeinden text Null,
a_Hoehenlagen text Null,
a_Befischungen int null,
a_Laenge float null,
a_Fischregionen text Null,
a_Hoehe_ab int Null,
a_Hoehe_bis int Null,
a_Datum_von DateTime Null,
a_Datum_bis DateTime Null,
a_Fischarten_anz int Null,
a_Fisch_St_ges int Null,
a_Fisch_kg_ges float Null,
a_Fischarten text Null,
a_Fisch_kg_ha_min float Null,
a_Fisch_kg_ha_max float Null
)

-- Fischart-spezifische Daten:
-- Ausgabe mit allen vorkommenden Fischarten füllen, Gewässerbezeichnungen (im Kontext EINES Gewässers)
Insert Into #ausgabe_daten(
a_Gewaesser,
a_fID,
a_Fischart,
a_Fischart_lat,
a_Fischart_kuerzel,
a_Anz_0_2,
a_Anz_1_4,
a_Anz_5_9,
a_Anz_10_14,
a_Anz_15_19,
a_Anz_20_24,
a_Anz_25_29,
a_Anz_30_39,
a_Anz_40_49,
a_Anz_50_59,
a_Anz_60_69,
a_Anz_70_n,
a_Anz_ges,
a_Gewicht_ges
)
Select
gGewaesser, 
fID,
fBez_deutsch,
fBez_latein + Case When fGefaehrdung Is Null Then '' Else '  (' + fGefaehrdung + ')' End,
fKuerzel,
Sum(fpAnz_0_2),
Sum(fpAnz_1_4),
Sum(fpAnz_5_9),
Sum(fpAnz_10_14),
Sum(fpAnz_15_19),
Sum(fpAnz_20_24),
Sum(fpAnz_25_29),
Sum(fpAnz_30_39),
Sum(fpAnz_40_49),
Sum(fpAnz_50_59),
Sum(fpAnz_60_69),
Sum(fpAnz_70_n),
Sum(fpAnz_ges),
Sum(fpGewicht_ges)
From #t, fangprot, fischart, gebiets_kz
Where fpProbestelle = t_psID * case when @HR = 'T' and isnull(t_psHochgerechnet, 'F') = 'T' then -1 else 1 end
  And fID = fpFischart And fID = IsNull(@fID, fID) And fGattung = isnull(@gattung, fGattung) And gID = @gID And fpGewicht_ges IS NOT NULL
Group by fID, fBez_deutsch, fBez_latein, fKuerzel, fGefaehrdung, gGewaesser
Order by fBez_deutsch 

Update #ausgabe_daten Set
a_L_H_0_2 = case when isnull(a_Anz_0_2, 0) = 0 then 0 else 100.0 / a_Anz_ges * a_Anz_0_2 end,
a_L_H_1_4 = case when isnull(a_Anz_1_4, 0) = 0 then 0 else 100.0 / a_Anz_ges * a_Anz_1_4 end,
a_L_H_5_9 = case when isnull(a_Anz_5_9, 0) = 0 then 0 else 100.0 / a_Anz_ges * a_Anz_5_9 end,
a_L_H_10_14 = case when isnull(a_Anz_10_14, 0) = 0 then 0 else 100.0 / a_Anz_ges * a_Anz_10_14 end,
a_L_H_15_19 = case when isnull(a_Anz_15_19, 0) = 0 then 0 else 100.0 / a_Anz_ges * a_Anz_15_19 end,
a_L_H_20_24 = case when isnull(a_Anz_20_24, 0) = 0 then 0 else 100.0 / a_Anz_ges * a_Anz_20_24 end,
a_L_H_25_29 = case when isnull(a_Anz_25_29, 0) = 0 then 0 else 100.0 / a_Anz_ges * a_Anz_25_29 end,
a_L_H_30_39 = case when isnull(a_Anz_30_39, 0) = 0 then 0 else 100.0 / a_Anz_ges * a_Anz_30_39 end,
a_L_H_40_49 = case when isnull(a_Anz_40_49, 0) = 0 then 0 else 100.0 / a_Anz_ges * a_Anz_40_49 end,
a_L_H_50_59 = case when isnull(a_Anz_50_59, 0) = 0 then 0 else 100.0 / a_Anz_ges * a_Anz_50_59 end,
a_L_H_60_69 = case when isnull(a_Anz_60_69, 0) = 0 then 0 else 100.0 / a_Anz_ges * a_Anz_60_69 end,
a_L_H_70_n = case when isnull(a_Anz_70_n, 0) = 0 then 0 else 100.0 / a_Anz_ges * a_Anz_70_n end


-- allgemeine Daten:
-- Gewässerbezeichnungen (im Kontext EINES Gewässers)
Insert Into #ausgabe_deck (a_Gewaesser) Select gGewaesser From gebiets_kz Where gID = @gID

-- listen der probestrecken, gemeinden und hoehenlagen:
-- temp. tab fuer ausgabe probestrecke/gemeinde/hoehenlage:
create table #psliste (
	Probestrecke varchar(80) null,
	Gemeinde varchar(40) null,
	Hoehenlage float null
)
insert into #psliste (Probestrecke, Gemeinde, Hoehenlage)
select distinct 
	case when isnull(psProbestrecke, '') = '' then 'keine Angabe' else psProbestrecke end, 
	case when isnull(gemName, '') = '' then 'keine Angabe' else gemName end, 
	psHoehenlage
from #t join probestelle on t_psID = psID join gemeinde on gemID = psGemeinde

Select @Probestrecken = ''
Select @Gemeinden = ''
Select @Hoehenlagen = ''
select 
	@Probestrecken = @Probestrecken + '- ' + ltrim(rtrim(Probestrecke)) + @NL,
	@Gemeinden = @Gemeinden + '- ' + ltrim(rtrim(Gemeinde)) + @NL,
	@Hoehenlagen = @Hoehenlagen + replace(convert(varchar, Hoehenlage), '.', ',') + @NL
from #psliste
order by Probestrecke
Update #ausgabe_deck Set a_Probestrecken = LTrim(RTrim(@Probestrecken))
Update #ausgabe_deck Set a_Gemeinden = LTrim(RTrim(@Gemeinden))
Update #ausgabe_deck Set a_Hoehenlagen = LTrim(RTrim(@Hoehenlagen))


-- weitere Angaben:
Update #ausgabe_deck set a_Hoehe_ab = (Select Min(psHoehenlage) From #t, probestelle Where psID = t_psID) 
Update #ausgabe_deck set a_Hoehe_bis = (Select Max(psHoehenlage) From #t, probestelle Where psID = t_psID)
if @Dat_von is not null
  update #ausgabe_deck set a_Datum_von = @Dat_von
else
  Update #ausgabe_deck Set a_Datum_von = (Select min(psDatum) From probestelle Where Exists(select * From #t Where psID = t_psID))
if @Dat_bis is not null
  update #ausgabe_deck set a_Datum_bis = @Dat_bis
else
  update #ausgabe_deck Set a_Datum_bis = (Select Max(psDatum) From probestelle Where Exists(select * From #t Where psID = t_psID))

-- Liste der Fischregionen:
Select @Fischregionen = ''
Select @Fischregionen = @Fischregionen + kDaten + ', ' 
From #t, probestelle, katalog 
Where kID = psFischreg And psID = t_psID
Group by kDaten, kOrdnung 
Order by kOrdnung, kDaten

If (@Fischregionen <> '') Update #ausgabe_deck Set a_Fischregionen = Substring(@Fischregionen, 1, DataLength(@Fischregionen) - 2)

-- Anzahl Fischarten
Select @Fischanz = (Select Count(*) From #ausgabe_daten)
Update #ausgabe_deck set a_Fischarten_anz = @Fischanz 
-- Gesamt-Anzahl Fische
Update #ausgabe_deck set a_Fisch_St_ges = (
	Select Sum(fpAnz_ges) From #t, #ausgabe_daten, fangprot 
	where fpGewicht_ges is not null
		and fpProbestelle = t_psID * case when @HR = 'T' and isnull(t_psHochgerechnet, 'F') = 'T' then -1 else 1 end And fpFischart = a_fID
		)
-- Gesamt-Masse Fische
Update #ausgabe_deck set a_Fisch_kg_ges = (
	Select Sum(fpGewicht_ges) From #t, #ausgabe_daten, fangprot 
	Where fpGewicht_ges is not null
		and fpProbestelle = t_psID * case when @HR = 'T' and isnull(t_psHochgerechnet, 'F') = 'T' then -1 else 1 end And fpFischart = a_fID
	)
-- Anzahl der Befischungen:
Update #ausgabe_deck set a_Befischungen = (Select count(*) from #t)
-- befischte Strecke:
Update #ausgabe_deck set a_Laenge = (Select sum(isnull(t_psGwStrecke_eff, 0))/ 1000. from #t)
--

-- Fischartbezogene Daten:
If (Select IsNull(a_Fisch_St_ges, 0) From #ausgabe_deck) > 0  
	-- Anteil der Fischart am Gesamtfang in %
	Update #ausgabe_daten Set a_Prozent_anz_2_alle = 100.0 / a_Fisch_St_ges * a_Anz_ges  
	From #ausgabe_deck

If (Select IsNull(a_Fisch_kg_ges, 0) From #ausgabe_deck) > 0
	-- Anteil der Fischart der Gesamtmasse alle gefangenen Fische in %
	Update #ausgabe_daten Set a_Prozent_kg_2_alle = 100.0 / a_Fisch_kg_ges * a_Gewicht_ges  
	From #ausgabe_deck

-- Fischartenliste:
Select @Fischarten = ''
Select @Fischarten = @Fischarten + fBez_deutsch + Case When fGefaehrdung Is Null Then '' Else ' (' + fGefaehrdung + ')' End + ', '
From #t, probestelle, fangprot, fischart 
Where psID = t_psID And fpProbestelle = psID And fID = fpFischart And fGattung = ISNULL(@gattung, fGattung)
Group by fBez_deutsch, fGefaehrdung
Order by fBez_deutsch

If (@Fischarten <> '') Update #ausgabe_deck Set a_Fischarten = Substring(@Fischarten, 1, DataLength(@Fischarten) - 2)

Update #ausgabe_deck set a_Fisch_kg_ha_min = (Select Min(t_Sum_kg_ha) From #t, probestelle Where psID = t_psID)
Update #ausgabe_deck set a_Fisch_kg_ha_max = (Select Max(t_Sum_kg_ha) From #t, probestelle Where psID = t_psID)

-- ausgabe:
if (@rs = 1)
	Select * From #ausgabe_deck
else
	Select * From #ausgabe_daten

-- aufraeumen:
Drop Table #t
drop table #psliste
Drop Table #ausgabe_deck
Drop Table #ausgabe_daten


GO
GRANT EXECUTE ON [dbo].[doc_fangmassenverteilung] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[doc_fangmassenverteilung] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[doc_fp]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[doc_fp] (@nID int) AS
/* Liefert das Fangprotokoll zu einer Probestelle
 history:
 2002-09-30	keyn: einige felder hinzu
 2006-07-30	klopfer: fpAnz_0_2 hinzu
 2006-09-18	klopfer: arg @nID statt @psID (nun auch fuer mehrere ps)
 2015-10-05	klopfer: kettet psBefischungsrichtung an psNummer an
 2015-11-21	klopfer: Koordinatentyp abhängig von Benutzereinstellung
 2018-10-05	klopfer: unbedingt UTM-Koordinaten
 2019-07-01	klopfer: psNummer
*/

Select 
	fpID,
	fpProbestelle,
	fpFischart,
	fBez_deutsch,
	fpAnz_0_2,
	fpAnz_1_4,
	fpAnz_5_9,
	fpAnz_10_14,
	fpAnz_15_19,
	fpAnz_20_24,
	fpAnz_25_29,
	fpAnz_30_39,
	fpAnz_40_49,
	fpAnz_50_59,
	fpAnz_60_69,
	fpAnz_70_n ,
	fpAnz_ges,
	fpAnz_ha,
	fpAnz_100m,
	fpGewicht_ges,
	fpGewicht_ha,
	fpGewicht_100m,
    ltrim(rtrim(psNummer)) + case when isnull(psBefischungsrichtung, '') <> '' then ' ' + psBefischungsrichtung else '' end as psNummer,
	psFangprot_Bem,
	gGewaesser 'Gewaesser',
	psDatum 'Datum',
	psLfdnr 'Lfdnr',
	psProbestrecke 'Probestrecke',
	tkName 'tk_name',
	tkNummer 'tk_nummer',
	psUTM_R as Koord_R,
	psUTM_H as Koord_H
From probestelle 
	join zv_kontext on psID = zvkWert and zvkBenutzer = @nID and lower(zvkTyp) = 'psexport'
	join fangprot on fpProbestelle = psID 
	join fischart on fID = fpFischart
	join gebiets_kz on gID = psGebiets_kz
	left outer join tknr_name on tkID = psTKnr_name
Order by fBez_deutsch, fpProbestelle


GO
GRANT EXECUTE ON [dbo].[doc_fp] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[doc_fp] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[doc_fpw]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
--
CREATE PROCEDURE [dbo].[doc_fpw] (@nID int) AS
/*Liefert das Fangprotokoll wissenschaftlich zu einer Probestelle
 history:
 2002-09-30	keyn: einige felder hinzu
 2006-09-18	klopfer: arg @nID statt @psID (nun fuer mehrere ps)
 2015-10-05	klopfer: kettet psBefischungsrichtung an psNummer an
 2015-11-21	klopfer: Koordinatentyp abhängig von Benutzereinstellung
 2018-10-05	klopfer: unbedingt UTM-Koordinaten
 2019-07-01	klopfer: psNummer
*/
--
Select	fpwID,
	fpwProbestelle,
	fpwFischart,
	fBez_deutsch,
	fpwStueckmasse_g,
	fpwTotallaenge,
	case when isnull(fpwSchuppenprobe, '') = 'T' then + 'X' end fpwSchuppenprobe,
	case when isnull(fpwDarmprobe, '') = 'T' then + 'X' end fpwDarmprobe,
	fpwBemerkung,
	ltrim(rtrim(psNummer)) + case when isnull(psBefischungsrichtung, '') <> '' then ' ' + psBefischungsrichtung else '' end as psNummer,
	gGewaesser 'Gewaesser',
	psDatum 'Datum',
	psLfdnr 'Lfdnr',
	psProbestrecke 'Probestrecke',
	tkName 'tk_name',
	tkNummer 'tk_nummer',
	psUTM_R as Koord_R,
	psUTM_H as KoordH
From fangprot_wiss
	join fischart on fpwFischart = fID
	join probestelle on fpwProbestelle = psID
	join gebiets_kz on gID = psGebiets_kz
	left outer join tknr_name on tkID = psTKnr_name
	join zv_kontext on psID = zvkWert and zvkBenutzer = @nID and lower(zvkTyp) = 'psexport'
Order by fBez_deutsch, psNummer
--


GO
GRANT EXECUTE ON [dbo].[doc_fpw] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[doc_fpw] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[doc_laengenhaeufigkeit]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
--
CREATE     PROCEDURE [dbo].[doc_laengenhaeufigkeit] (
	@nID int,
	@gkz varchar(20), -- blind
	@gID int, 
	@wknr varchar(80),
	@gwtyp char(1), 
	@gattung char(1),
	@fID int, 
	@Dat_von DateTime, 
	@Dat_bis DateTime,
	@HR char(1) = 'F',
	@rs int
) AS
/* laengenhaeufigkeitsverteilung; deckblatt und details 
  history:
  2002-10-01	keyn: der ausgabezeitbereich ist nun der uebergebene abfragezeitbereich; wenn nicht angegeben, dann das datum der aeltesten und der juengsten probestrecke
  2005-02-24	keyn: ueberarbeitet; mehrfachauswahl kreise und gemeinden
  2006-07-30	klopfer: Größengruppe 0<2 integriert; Suchbegriff Anlaesse und Fischreg und Erfkat hinzu
  2006-09-18	klopfer: verhindert div0; neues berechnetes Feld Anzahl der Befischungen
  2007-04-18	klopfer: nun mit @wknr und @gwtyp
  2009-03-02	klopfer: überall varchar(4000)
  2009-04-04	klopfer: befischte Strecke hinzu
  2010-02-14	klopfer: @rs hinzu
  2012-07-23	klopfer: Option @HR
  2019-07-07	klopfer: @gattung hinzu
  2019-08-02	klopfer: Abschnittsauswahl hinzu
*/

-- konstanten:
declare @MinDate datetime, @MaxDate datetime
select @MinDate = '01.01.1900', @MaxDate = '01.01.3000'
-- variablen:
declare @sql varchar(8000)
declare @zvkxOptionGemeinden char(1), @zvkxListe1Gemeinden varchar(4000), @zvkxOptionLandkreise char(1), @zvkxListe1Landkreise varchar(4000), @zvkxListe2Landkreise varchar(4000)
declare @zvkxOption char(1), @zvkxListe1 varchar(4000), @zvkxListe2 varchar(4000)
Declare @Probestrecken varchar(4000), @Gemeinden varchar(4000), @Hoehenlagen varchar(4000), @Fischregionen varchar(4000), @Fischarten varchar(4000)
declare @Fischanz int
Declare @NL char(2)
Select @NL = CHAR(13) + CHAR(10)

-- betroffenen Probestellen:
Create Table #t (
	t_psID int Null,
	t_psDatum DateTime Null,
	t_Sum_kg_ha Float Null,
	t_psHoehenlage Float Null,
	t_psGwStrecke_eff float null,
	t_psHochgerechnet char(1) null
)

select @sql = 'insert into #t (t_psID, t_psDatum, t_Sum_kg_ha, t_psHoehenlage, t_psGwStrecke_eff, t_psHochgerechnet)'
select @sql = @sql + ' select psID, psDatum, sum(fpGewicht_ha), psHoehenlage, psGwStrecke_eff, psHochgerechnet '
select @sql = @sql + ' From probestelle join gebiets_kz on gID = psGebiets_kz join gemeinde on gemID = psGemeinde join fangprot '
select @sql = @sql + ' on psID = fpProbestelle * case when ''' + @HR + ''' = ''T'' and isnull(psHochgerechnet, ''F'') = ''T'' then -1 else 1 end'
select @sql = @sql + ' join fischart on fID = fpFischart '
select @sql = @sql + ' Where 1 = 1 '
if (@gattung is not null) select @sql = @sql + ' and isnull(fGattung, ''F'') = ''' + @gattung + ''' '
if (@gID is not null) select @sql = @sql + 'and isnull(psGebiets_kz, -1)  = ' + ltrim(str(@gID)) + ' ' 
if (@Dat_von is not null) select @sql = @sql + ' and psDatum >= convert(datetime, ''' + convert(varchar(10), @Dat_von, 104) + ''', 104) '
if (@Dat_bis is not null) select @sql = @sql + ' and psDatum <= convert(datetime, ''' + convert(varchar(10), @Dat_bis, 104) + ''', 104) '
if (@gwtyp is not null) select @sql = @sql + ' and psGwTyp = ''' + @gwtyp + ''' '
if (@gattung is not null) select @sql = @sql + ' and isnull(psGattung, ''F'') = ''' + @gattung + ''' '

select @zvkxOptionLandkreise = zvkxOption, @zvkxListe1Landkreise = convert(varchar(4000), zvkxListe1), @zvkxListe2Landkreise = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'landkreise'
if (@zvkxOptionLandkreise = 'A') select @zvkxListe2Landkreise = 'alle'
select @zvkxOptionGemeinden = zvkxOption, @zvkxListe1Gemeinden = convert(varchar(4000), zvkxListe1) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'gemeinden'
if (right(@zvkxListe1Gemeinden, 1) = ',') select @zvkxListe1Gemeinden = substring(@zvkxListe1Gemeinden, 1, datalength(@zvkxListe1Gemeinden) - 1)
if (isnull(@zvkxOptionGemeinden, 'K') = 'K') 
  select @sql = @sql + ' and 1 = 0 '
else 
  if (isnull(@zvkxOptionGemeinden, 'K') = 'A')  and (isnull(@zvkxOptionLandkreise, 'K') = 'A')
    select @sql = @sql + ''
  else
    select @sql = @sql + ' and psGemeinde in (' + @zvkxListe1Gemeinden + ') '

-- Abschnitte:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'abschnitte'
if (isnull(@zvkxOption, 'U') not in ('U', 'A')) begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and psAbschnitt in (' + @zvkxListe1 + ') '
end

-- anlaesse:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'anlaesse'
if (@zvkxOption <> 'A') begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and ( psBetreff in (' + @zvkxListe1 + ') or '
  if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @sql = @sql + ' psBetreff is null ) ' else select @sql = @sql + ' 1 = 0 ) '
end
-- fischreg:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'fischreg'
if (@zvkxOption <> 'A') begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and ( psFischreg in (' + @zvkxListe1 + ') or '
  if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @sql = @sql + ' psFischreg is null ) ' else select @sql = @sql + ' 1 = 0 ) '
end
-- erfkat:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'erfkat'
if (@zvkxOption <> 'A') begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and ( psErfass_Kat in (' + @zvkxListe1 + ') or '
  if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @sql = @sql + ' psErfass_Kat is null ) ' else select @sql = @sql + ' 1 = 0 ) '
end
-- TK:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'tk'
if (@zvkxOption <> 'A') begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and ( psTKnr_name in (' + @zvkxListe1 + ') or '
  if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @sql = @sql + ' psTKnr_name is null ) ' else select @sql = @sql + ' 1 = 0 ) '
end
--
select @sql = @sql + ' Group by psID, psDatum, psHoehenlage, psGwStrecke_eff, psHochgerechnet Order by psDatum desc'
exec (@sql)


-- definition der ausgabetabellen:
Create Table #ausgabe_daten
(
a_Gewaesser varchar(80) Null,
a_fID int Null,
a_Fischart varchar(80) Null,
a_Fischart_lat varchar(80) Null,
a_Fischart_kuerzel varchar(10) Null,
a_Anz_0_2 int null,
a_Anz_1_4 int Null,
a_Anz_5_9 int Null,
a_Anz_10_14 int Null,
a_Anz_15_19 int Null,
a_Anz_20_24 int Null,
a_Anz_25_29 int Null,
a_Anz_30_39 int Null,
a_Anz_40_49 int Null,
a_Anz_50_59 int Null,
a_Anz_60_69 int Null,
a_Anz_70_n int Null,
a_Anz_ges int Null,		-- einer Fischart
a_Prozent_anz_2_alle float Null,	-- Prozent Anzahl zu allen Fischen (a_Fisch_St_ges)
a_Gewicht_ges float Null,	-- einer Fischart
a_Prozent_kg_2_alle float Null,	-- Prozent Gewicht zu allen Fischen (a_Fisch_kg_ges)
a_L_H_0_2 float null,
a_L_H_1_4 float Null,
a_L_H_5_9 float Null,
a_L_H_10_14 float Null,
a_L_H_15_19 float Null,
a_L_H_20_24 float Null,
a_L_H_25_29 float Null,
a_L_H_30_39 float Null,
a_L_H_40_49 float Null,
a_L_H_50_59 float Null,
a_L_H_60_69 float Null,
a_L_H_70_n float Null
)

-- allgemeine Daten
Create Table #ausgabe_deck
(
a_Gewaesser varchar(80) Null,
a_Probestrecken text Null,
a_Gemeinden text Null,
a_Hoehenlagen text Null,
a_Befischungen int null,
a_Laenge float null,
a_Fischregionen text Null,
a_Hoehe_ab int Null,
a_Hoehe_bis int Null,
a_Datum_von DateTime Null,
a_Datum_bis DateTime Null,
a_Fischarten_anz int Null,
a_Fisch_St_ges int Null,
a_Fisch_kg_ges float Null,
a_Fischarten text Null,
a_Fisch_kg_ha_min float Null,
a_Fisch_kg_ha_max float Null
)

-- Fischart-spezifische Daten:
-- Ausgabe mit allen vorkommenden Fischarten füllen, Gewässerbezeichnungen (im Kontext EINES Gewässers)

Insert Into #ausgabe_daten
(
a_Gewaesser,
a_fID,
a_Fischart,
a_Fischart_lat,
a_Fischart_kuerzel,
a_Anz_0_2,
a_Anz_1_4,
a_Anz_5_9,
a_Anz_10_14,
a_Anz_15_19,
a_Anz_20_24,
a_Anz_25_29,
a_Anz_30_39,
a_Anz_40_49,
a_Anz_50_59,
a_Anz_60_69,
a_Anz_70_n,
a_Anz_ges,
a_Gewicht_ges
)
Select
gGewaesser, 
fID,
fBez_deutsch,
fBez_latein + Case When fGefaehrdung Is Null Then '' Else '  (' + fGefaehrdung + ')' End,
fKuerzel,
Sum(fpAnz_0_2),
Sum(fpAnz_1_4),
Sum(fpAnz_5_9),
Sum(fpAnz_10_14),
Sum(fpAnz_15_19),
Sum(fpAnz_20_24),
Sum(fpAnz_25_29),
Sum(fpAnz_30_39),
Sum(fpAnz_40_49),
Sum(fpAnz_50_59),
Sum(fpAnz_60_69),
Sum(fpAnz_70_n),
Sum(fpAnz_ges),
Sum(fpGewicht_ges)
From #t, fangprot, fischart, gebiets_kz
Where fpProbestelle = t_psID * case when @HR = 'T' and isnull(t_psHochgerechnet, 'F') = 'T' then -1 else 1 end
  And fID = fpFischart And fID = IsNull(@fID, fID) And fGattung = ISNULL(@gattung, fGattung) And gID = @gID
Group by fID, fBez_deutsch, fBez_latein, fKuerzel, fGefaehrdung, gGewaesser 
Order by fBez_deutsch 

Update #ausgabe_daten Set
a_L_H_0_2 = case when isnull(a_Anz_0_2, 0) = 0 then 0 else 100.0 / a_Anz_ges * a_Anz_0_2 end,
a_L_H_1_4 = case when isnull(a_Anz_1_4, 0) = 0 then 0 else 100.0 / a_Anz_ges * a_Anz_1_4 end,
a_L_H_5_9 = case when isnull(a_Anz_5_9, 0) = 0 then 0 else 100.0 / a_Anz_ges * a_Anz_5_9 end,
a_L_H_10_14 = case when isnull(a_Anz_10_14, 0) = 0 then 0 else 100.0 / a_Anz_ges * a_Anz_10_14 end,
a_L_H_15_19 = case when isnull(a_Anz_15_19, 0) = 0 then 0 else 100.0 / a_Anz_ges * a_Anz_15_19 end,
a_L_H_20_24 = case when isnull(a_Anz_20_24, 0) = 0 then 0 else 100.0 / a_Anz_ges * a_Anz_20_24 end,
a_L_H_25_29 = case when isnull(a_Anz_25_29, 0) = 0 then 0 else 100.0 / a_Anz_ges * a_Anz_25_29 end,
a_L_H_30_39 = case when isnull(a_Anz_30_39, 0) = 0 then 0 else 100.0 / a_Anz_ges * a_Anz_30_39 end,
a_L_H_40_49 = case when isnull(a_Anz_40_49, 0) = 0 then 0 else 100.0 / a_Anz_ges * a_Anz_40_49 end,
a_L_H_50_59 = case when isnull(a_Anz_50_59, 0) = 0 then 0 else 100.0 / a_Anz_ges * a_Anz_50_59 end,
a_L_H_60_69 = case when isnull(a_Anz_60_69, 0) = 0 then 0 else 100.0 / a_Anz_ges * a_Anz_60_69 end,
a_L_H_70_n = case when isnull(a_Anz_70_n, 0) = 0 then 0 else 100.0 / a_Anz_ges * a_Anz_70_n end

-- allgemeine Daten:
-- Gewässerbezeichnungen (im Kontext EINES Gewässers)
Insert Into #ausgabe_deck (a_Gewaesser) Select gGewaesser From gebiets_kz Where gID = @gID

-- listen der probestrecken, gemeinden und hoehenlagen:
-- temp. tab fuer ausgabe probestrecke/gemeinde/hoehenlage:
create table #psliste (
	Probestrecke varchar(80) null,
	Gemeinde varchar(40) null,
	Hoehenlage float null
)
insert into #psliste (Probestrecke, Gemeinde, Hoehenlage)
select distinct 
	case when isnull(psProbestrecke, '') = '' then 'keine Angabe' else psProbestrecke end, 
	case when isnull(gemName, '') = '' then 'keine Angabe' else gemName end, 
	psHoehenlage
from #t join probestelle on t_psID = psID join gemeinde on gemID = psGemeinde

Select @Probestrecken = ''
Select @Gemeinden = ''
Select @Hoehenlagen = ''
select 
	@Probestrecken = @Probestrecken + '- ' + ltrim(rtrim(Probestrecke)) + @NL,
	@Gemeinden = @Gemeinden + '- ' + ltrim(rtrim(Gemeinde)) + @NL,
	@Hoehenlagen = @Hoehenlagen + replace(convert(varchar, Hoehenlage), '.', ',') + @NL
from #psliste
order by Probestrecke
Update #ausgabe_deck Set a_Probestrecken = LTrim(RTrim(@Probestrecken))
Update #ausgabe_deck Set a_Gemeinden = LTrim(RTrim(@Gemeinden))
Update #ausgabe_deck Set a_Hoehenlagen = LTrim(RTrim(@Hoehenlagen))

-- weitere Angaben:
Update #ausgabe_deck set a_Hoehe_ab = (Select Min(psHoehenlage) From #t, probestelle Where psID = t_psID) 
Update #ausgabe_deck set a_Hoehe_bis = (Select Max(psHoehenlage) From #t, probestelle Where psID = t_psID)
if @Dat_von is not null
  update #ausgabe_deck set a_Datum_von = @Dat_von
else
  Update #ausgabe_deck Set a_Datum_von = (Select min(psDatum) From probestelle Where Exists(select * From #t Where psID = t_psID))
if @Dat_bis is not null
  update #ausgabe_deck set a_Datum_bis = @Dat_bis
else
  update #ausgabe_deck Set a_Datum_bis = (Select Max(psDatum) From probestelle Where Exists(select * From #t Where psID = t_psID))

-- Liste der Fischregionen:
Select @Fischregionen = ''
Select @Fischregionen = @Fischregionen + kDaten + ', ' 
From #t, probestelle, katalog 
Where kID = psFischreg And psID = t_psID
Group by kDaten, kOrdnung 
Order by kOrdnung, kDaten

If (@Fischregionen <> '') Update #ausgabe_deck Set a_Fischregionen = Substring(@Fischregionen, 1, DataLength(@Fischregionen) - 2)

-- Anzahl Fischarten
Select @Fischanz = (Select Count(*) From #ausgabe_daten)
Update #ausgabe_deck set a_Fischarten_anz = @Fischanz 
-- Gesamt-Anzahl Fische
Update #ausgabe_deck set a_Fisch_St_ges = (Select Sum(fpAnz_ges) From #t, #ausgabe_daten, fangprot 
Where fpProbestelle = t_psID * case when @HR = 'T' and isnull(t_psHochgerechnet, 'F') = 'T' then -1 else 1 end And fpFischart = a_fID)
-- Gesamt-Masse Fische
Update #ausgabe_deck set a_Fisch_kg_ges = (Select Sum(fpGewicht_ges) From #t, #ausgabe_daten, fangprot 
Where fpProbestelle = t_psID * case when @HR = 'T' and isnull(t_psHochgerechnet, 'F') = 'T' then -1 else 1 end And fpFischart = a_fID)
-- Anzahl der Befischungen:
Update #ausgabe_deck set a_Befischungen = (Select count(*) From #t)
-- befischte Strecke:
Update #ausgabe_deck set a_Laenge = (Select sum(isnull(t_psGwStrecke_eff, 0)) / 1000. From #t)
--
-- Fischartbezogene Daten:
If (Select IsNull(a_Fisch_St_ges, 0) From #ausgabe_deck) > 0  
	-- Anteil der Fischart am Gesamtfang in %
	Update #ausgabe_daten Set a_Prozent_anz_2_alle = 100.0 / a_Fisch_St_ges * a_Anz_ges  
	From #ausgabe_deck

If (Select IsNull(a_Fisch_kg_ges, 0) From #ausgabe_deck) > 0
	-- Anteil der Fischart der Gesamtmasse alle gefangenen Fische in %
	Update #ausgabe_daten Set a_Prozent_kg_2_alle = 100.0 / a_Fisch_kg_ges * a_Gewicht_ges  
	From #ausgabe_deck

-- Fischartenliste:
Select @Fischarten = ''
Select @Fischarten = @Fischarten + fBez_deutsch + Case When fGefaehrdung Is Null Then '' Else ' (' + fGefaehrdung + ')' End + ', '
From #t, probestelle, fangprot, fischart 
Where psID = t_psID And fpProbestelle = psID And fID = fpFischart And fGattung = ISNULL(@gattung, fGattung)
Group by fBez_deutsch, fGefaehrdung
Order by fBez_deutsch

If (@Fischarten <> '') Update #ausgabe_deck Set a_Fischarten = Substring(@Fischarten, 1, DataLength(@Fischarten) - 2)

Update #ausgabe_deck set a_Fisch_kg_ha_min = (Select Min(t_Sum_kg_ha) From #t, probestelle Where psID = t_psID)
Update #ausgabe_deck set a_Fisch_kg_ha_max = (Select Max(t_Sum_kg_ha) From #t, probestelle Where psID = t_psID)

-- ausgabe:
if (@rs = 1) 
	Select * From #ausgabe_deck
else
	Select * From #ausgabe_daten

-- aufraeumen:
Drop Table #t
drop table #psliste
Drop Table #ausgabe_deck
Drop Table #ausgabe_daten


GO
GRANT EXECUTE ON [dbo].[doc_laengenhaeufigkeit] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[doc_laengenhaeufigkeit] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[doc_ps]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
--
CREATE  PROCEDURE [dbo].[doc_ps] (@nID int) AS
/* history:
  2006-09-18	klopfer: Datentyp psGwBreite von int auf float; Argument @nID statt @psID (auch fuer mehrere Probestellen geeignet)
  2006-10-16	klopfer: Korrektur (einige Zeilen wurden nicht ausgeführt)
  2015-10-05	klopfer: kettet psBefischungsrichtung an psNummer an; Gewässerkennzzahl ("GKZ") hinzu
  2015-11-21	klopfer: Koordinatentyp abhängig von Benutzereinstellung
  2015-12-01	klopfer: Probestellennr auf vc50
  2018-10-05	klopfer: unbedingt UTM-Koordinaten
  2019-07-01	klopfer: psNummer
*/
--
CREATE TABLE #ps (
ID int NULL ,
Gewaesser varchar (80) NULL , 
GKZ varchar(20) null,
Landkreis varchar (80) NULL , 
Gemeinde varchar (80) NULL , 
Einr_B_Name varchar (225) NULL, 
Einr_B_Adr varchar (125) NULL, 
Einr_B_Tel varchar (20) NULL, 
Einr_F_Name varchar (225) NULL, 
Einr_F_Adr varchar (125) NULL, 
Einr_F_Tel varchar (20) NULL,
Probestellennr varchar (50) NULL , 
Lfdnr int NULL , 
Datum datetime NULL , 
Betreff varchar (80) NULL , 
Probestrecke varchar (80) NULL , 
Bewirtart varchar (80) NULL , 
Erfass_Kat varchar (80) NULL , 
Koord_R float NULL , 
Koord_H float NULL , 
TK_nr varchar(10) NULL , 
TK_name varchar (40) NULL ,
GwTyp char (1) NULL , 
GwTypbez varchar (80) NULL , 
Fischreg varchar (80) NULL , 
Fischreg_Bem varchar (255) NULL , 
Wasserstand varchar (80) NULL , 
Stroemung varchar (80) NULL , 
Struktur varchar (125) NULL , 
Bewuchs varchar (125) NULL , 
Linienfuehrung varchar (80) NULL , 
Umland varchar (125) NULL , 
Uferverbauung varchar (5) NULL , 
Querverbauung varchar (5) NULL , 
Beeintr varchar (125) NULL , 
Oekowert varchar (80) NULL ,
Fangmethode varchar (80) NULL , 
Fanggeraet varchar (80) NULL , 
GwBreite float NULL, 
GwTiefe float NULL, 
GwFlaeche float NULL, 
Hoehenlage float NULL, 
Hoehenlage_Bem varchar(80) NULL,
GwStrecke_eff float NULL, 
GwBreite_eff float NULL, 
Fangquote int NULL ,
Wassertemp float NULL , 
Leitfaehigkeit int NULL , 
Fangprot_wiss char (1) NULL 
)

Insert Into #ps (
[ID],
Probestellennr, Lfdnr, Datum, Probestrecke, Koord_R, Koord_H, GwTyp, Fischreg_Bem,
Struktur, Bewuchs, Umland, Uferverbauung, Querverbauung, Beeintr, Fanggeraet,
GwBreite, GwTiefe, GwFlaeche, Hoehenlage, Hoehenlage_Bem, GwStrecke_eff, GwBreite_eff, Fangquote, Wassertemp, Leitfaehigkeit, Fangprot_wiss 
)
Select 
	psID,
    ltrim(rtrim(psNummer)) + case when isnull(psBefischungsrichtung, '') <> '' then ' ' + psBefischungsrichtung else '' end,
	psLfdnr,
	psDatum,
	psProbestrecke,
	psUTM_R as Koord_R, 
	psUTM_H as Koord_H, 
	psGwTyp,
	psFischreg_Bem,
	psStruktur,
	psBewuchs,
	psUmland,
	psUferverbauung,
	psQuerverbauung,
	psBeeintr,
	psFanggeraet,
	psGwBreite,
	psGwTiefe,
	psGwFlaeche,
	psHoehenlage,
	psHoehenlage_Bem,
	psGwStrecke_eff,
	psGwBreite_eff,
	psFangquote,
	psWassertemp,
	psLeitfaehigkeit,
	psFangprot_wiss
From probestelle join zv_kontext on psID = zvkWert Where zvkBenutzer = @nID and lower(zvkTyp) = 'psexport'
/******/
Update #ps set Gewaesser = gGewaesser From probestelle p, gebiets_kz Where p.psID = #ps.ID And gID = p.psGebiets_kz
Update #ps set GKZ = gGebiets_kz From probestelle p, gebiets_kz Where p.psID = #ps.ID And gID = p.psGebiets_kz
Update #ps set Landkreis = gemKreis From probestelle p, gemeinde Where p.psID = #ps.ID And gemID = p.psGemeinde
Update #ps set Gemeinde = gemName From probestelle p, gemeinde Where p.psID = #ps.ID And gemID = p.psGemeinde
Update #ps set TK_nr = tkNummer, TK_name = tkName From probestelle p, tknr_name Where p.psID = #ps.ID And tkID = p.psTKnr_name
Update #ps set Einr_B_Name = IsNull(erBezeichnung, '') + case when isnull(erPerson_name, '') <> '' then + ' / ' + erPerson_name else '' end + case when isnull(erPerson_vname, '') <> '' then ', ' + erPerson_vname else '' end From probestelle p, einrichtung Where p.psID = #ps.ID And erID = p.psEinrichtung_B
Update #ps set Einr_B_Adr = case when isnull(erStrasse, '') <> '' then + erStrasse + ', ' else '' end + case when isnull(erPLZ, '') <> '' then + erPLZ else '' end + case when isnull(erOrt, '') <> '' then ' ' + erOrt else '' end From probestelle p, einrichtung Where p.psID = #ps.ID And erID = p.psEinrichtung_B
Update #ps set Einr_B_Tel = erTelefon From probestelle p, einrichtung Where p.psID = #ps.ID And erID = p.psEinrichtung_B
Update #ps set Einr_F_Name = IsNull(erBezeichnung, '') + case when isnull(erPerson_name, '') <> '' then + ' / ' + erPerson_name else '' end + case when isnull(erPerson_vname, '') <> '' then ', ' + erPerson_vname else '' end From probestelle p, einrichtung Where p.psID = #ps.ID And erID = p.psEinrichtung_F
Update #ps set Einr_F_Adr = case when isnull(erStrasse, '') <> '' then + erStrasse + ', ' else '' end + case when isnull(erPLZ, '') <> '' then + erPLZ else '' end + case when isnull(erOrt, '') <> '' then ' ' + erOrt else '' end From probestelle p, einrichtung Where p.psID = #ps.ID And erID = p.psEinrichtung_F
Update #ps set Einr_F_Tel = erTelefon From probestelle p, einrichtung Where p.psID = #ps.ID And erID = p.psEinrichtung_F
Update #ps set Betreff = kDaten From probestelle p, katalog Where p.psID = #ps.ID And kID = p.psBetreff
Update #ps set Bewirtart = kDaten From probestelle p, katalog Where p.psID = #ps.ID And kID = p.psBewirtart
Update #ps set Erfass_Kat = kDaten From probestelle p, katalog Where p.psID = #ps.ID And kID = p.psErfass_Kat
Update #ps set GwTypbez = kDaten From probestelle p, katalog Where p.psID = #ps.ID And kID = p.psGwTypbez
Update #ps set Fischreg = kDaten From probestelle p, katalog Where p.psID = #ps.ID And kID = p.psFischreg
Update #ps set Wasserstand = kDaten From probestelle p, katalog Where p.psID = #ps.ID And kID = p.psWasserstand
Update #ps set Stroemung = kDaten From probestelle p, katalog Where p.psID = #ps.ID And kID = p.psStroemung
Update #ps set Uferverbauung = Case When IsNull(Uferverbauung, 'F') = 'T' Then 'Ja' Else 'Nein' End
Update #ps set Querverbauung = Case When IsNull(Querverbauung, 'F') = 'T' Then 'Ja' Else 'Nein' End
Update #ps set Linienfuehrung = kDaten From probestelle p, katalog Where p.psID = #ps.ID And kID = p.psLinienfuehrung
Update #ps set Oekowert = kDaten From probestelle p, katalog Where p.psID = #ps.ID And kID = p.psOekowert
Update #ps set Fangmethode = kDaten From probestelle p, katalog Where p.psID = #ps.ID And kID = p.psFangmethode

Select * from #ps order by Probestellennr

Drop Table #ps


GO
GRANT EXECUTE ON [dbo].[doc_ps] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[doc_ps] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[doc_psTabelle]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
--
CREATE PROCEDURE [dbo].[doc_psTabelle] (@nID int) AS
/* history:
  2006-09-18	klopfer: erstellt
  2007-04-16	klopfer: nun mit OWKID
  2007-04-18	klopfer: nun auch ohne Fangprot
  2010-01-13	klopfer: Gebietskennzahl, Erfassungskategorie, Fischart_dt, Fischart_lt neu 
  2010-03-02	klopfer: AID hinzu
  2015-10-05	klopfer: kettet psBefischungsrichtung an psNummer an
  2015-11-21	klopfer: Koordinatentyp abhängig von Benutzereinstellung
  2015-12-01	klopfer: Probestellennr auf vc50
  2019-07-08	klopfer: psNummer
*/
--
CREATE TABLE #ps (
Gewaesser varchar (80) NULL , 
Gebietskennzahl varchar(20) null,
OWKID varchar(20) null,
AID int null,
Probestellennr varchar (50) NULL , 
Probestrecke varchar (80) NULL , 
TK_nr varchar(10) NULL ,
Koord_R float null,
Koord_H float null,
Datum datetime NULL , 
GwTyp char (1) NULL , GwTypbez varchar (80) NULL , 
Fischreg varchar (80) NULL , 
Erfassungskategorie varchar(80) null,
Hoehenlage float NULL, Hoehenlage_Bem varchar(80) NULL,
GwStrecke_eff float NULL, 
GwBreite_eff float NULL, 
Leitfaehigkeit int NULL , 
Wasserstand varchar (80) NULL , 
Stroemung varchar (80) NULL , 
Struktur varchar (125) NULL , 
Uferverbauung varchar (4) NULL , 
Querverbauung varchar (4) NULL , 
Beeintr varchar (125) NULL , 
Umland varchar (125) NULL , 
Fischart varchar(10) null,
Fischbez_dt varchar(80) null,
Fischbez_lt varchar(80) null,
Anzahl int null,
Anteil decimal(6, 2) null,
MehrereGruppen char(5) null,
NullPlus char(4) null,
Gesamtzahl int null, Gruppenanzahl int null,
psID int, fpID int null, fID int null, psAbschnitt int null
)

Insert Into #ps (
  Gewaesser,
  Gebietskennzahl,
  Probestellennr,
  Probestrecke,
  TK_nr,
  Koord_R,
  Koord_H,
  Datum,
  GwTyp, GwTypbez,
  Fischreg,
  Erfassungskategorie,
  Hoehenlage, Hoehenlage_Bem,
  GwStrecke_eff,
  GwBreite_eff,
  Leitfaehigkeit,
  Wasserstand,
  Stroemung,
  Struktur,
  Uferverbauung,
  Querverbauung,
  Beeintr,
  Umland,
  Fischart,
  Fischbez_dt,
  Fischbez_lt,
  Anzahl,
  MehrereGruppen,
  NullPlus,
  Gruppenanzahl,
  psID, fpID, fID, psAbschnitt
)
Select 
  gGewaesser,
  gGebiets_kz,
  ltrim(rtrim(psNummer)) + case when isnull(psBefischungsrichtung, '') <> '' then ' ' + psBefischungsrichtung else '' end,
  psProbestrecke,
  tkNummer,
  case when (dbo.f_UTMKoordinaten(@nID) = 1) then psUTM_R else psGKK_R end as Koord_R,
  case when (dbo.f_UTMKoordinaten(@nID) = 1) then psUTM_H else psGKK_H end as Koord_H,
  psDatum,
  psGwTyp, GwTyp.kDaten,
  Fischreg.kDaten,
  ErfassKat.kDaten,
  psHoehenlage, psHoehenlage_Bem,
  psGwStrecke_eff,
  psGwBreite_eff,
  psLeitfaehigkeit,
  Wasserstand.kDaten,
  Stroemung.kDaten,
  psStruktur,
  case when isnull(psUferverbauung, 'F') = 'T' then 'Ja' else 'Nein' end,
  case when isnull(psQuerverbauung, 'F') = 'T' then 'Ja' else 'Nein' end,
  psBeeintr,
  psUmland,
  fKuerzel,
  fBez_deutsch,
  fBez_latein,
  fpAnz_ges,
  'Nein',
  'Nein',
  0,
  psID, fpID, fID, psAbschnitt
From probestelle 
  left outer join fangprot on psID = fpProbestelle left outer join fischart on fID = fpFischart
  join gebiets_kz on gID = psGebiets_kz
  left outer join tknr_name on tkID = psTKnr_name
  left outer join katalog GwTyp on GwTyp.kID = psGwTypbez
  left outer join katalog Fischreg on Fischreg.kID = psFischreg
  left outer join katalog ErfassKat on ErfassKat.kID = psErfass_Kat
  left outer join katalog Wasserstand on Wasserstand.kID = psWasserstand
  left outer join katalog Stroemung on Stroemung.kID = psStroemung
  join zv_kontext on psID = zvkWert and zvkBenutzer = @nID and lower(zvkTyp) = 'psexport'
--
update #ps set OWKID = wkNummer, AID = aOrdnung from wasserkoerper join abschnitt a on wkID = a.aWasserkoerper where psAbschnitt = a.aID
update #ps set Gesamtzahl = (select sum(Anzahl) from #ps ps2 where ps2.psID = #ps.psID)
update #ps set Anteil = case when isnull(Gesamtzahl, 0) = 0 then 0 else (Anzahl * 100.) / Gesamtzahl end

update #ps set Gruppenanzahl = Gruppenanzahl + 1 where exists(select * from fangprot where fpProbestelle = psID and isnull(fpAnz_0_2, 0) > 0)
update #ps set Gruppenanzahl = Gruppenanzahl + 1 where exists(select * from fangprot where fpProbestelle = psID and isnull(fpAnz_1_4, 0) > 0)
update #ps set Gruppenanzahl = Gruppenanzahl + 1 where exists(select * from fangprot where fpProbestelle = psID and isnull(fpAnz_5_9, 0) > 0)
update #ps set Gruppenanzahl = Gruppenanzahl + 1 where exists(select * from fangprot where fpProbestelle = psID and isnull(fpAnz_10_14, 0) > 0)
update #ps set Gruppenanzahl = Gruppenanzahl + 1 where exists(select * from fangprot where fpProbestelle = psID and isnull(fpAnz_15_19, 0) > 0)
update #ps set Gruppenanzahl = Gruppenanzahl + 1 where exists(select * from fangprot where fpProbestelle = psID and isnull(fpAnz_20_24, 0) > 0)
update #ps set Gruppenanzahl = Gruppenanzahl + 1 where exists(select * from fangprot where fpProbestelle = psID and isnull(fpAnz_25_29, 0) > 0)
update #ps set Gruppenanzahl = Gruppenanzahl + 1 where exists(select * from fangprot where fpProbestelle = psID and isnull(fpAnz_30_39, 0) > 0)
update #ps set Gruppenanzahl = Gruppenanzahl + 1 where exists(select * from fangprot where fpProbestelle = psID and isnull(fpAnz_40_49, 0) > 0)
update #ps set Gruppenanzahl = Gruppenanzahl + 1 where exists(select * from fangprot where fpProbestelle = psID and isnull(fpAnz_50_59, 0) > 0)
update #ps set Gruppenanzahl = Gruppenanzahl + 1 where exists(select * from fangprot where fpProbestelle = psID and isnull(fpAnz_60_69, 0) > 0)
update #ps set Gruppenanzahl = Gruppenanzahl + 1 where exists(select * from fangprot where fpProbestelle = psID and isnull(fpAnz_70_n, 0) > 0)
update #ps set MehrereGruppen = 'Ja' where Gruppenanzahl > 1
--
update #ps set NullPlus = 'Ja' where exists(select * from fangprot where fpProbestelle = psID and isnull(fpAnz_0_2, 0) > 0)
--
Select  
  Gewaesser,
    Gebietskennzahl,
  OWKID,
    AID,
  Probestellennr,
  Probestrecke,
  TK_nr,
  Koord_R, Koord_H,
  Datum,
  GwTyp, GwTypbez,
  Fischreg,
    Erfassungskategorie,
  Hoehenlage, Hoehenlage_Bem,
  GwStrecke_eff,
  GwBreite_eff,
  Leitfaehigkeit,
  Wasserstand,
  Stroemung,
  Struktur,
  Uferverbauung,
  Querverbauung,
  Beeintr,
  Umland,
  Fischart,
    Fischbez_dt,
    Fischbez_lt,
  Anzahl,
  MehrereGruppen,
  NullPlus
from #ps order by Gewaesser, OWKID, Probestellennr
--
Drop Table #ps
--


GO
GRANT EXECUTE ON [dbo].[doc_psTabelle] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[doc_psTabelle] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[doc_referenzarten]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[doc_referenzarten] (@wkID int) AS
BEGIN
sET NOCOUNT ON;
--
declare @aID1 int, @rows1 int, @aID2 int, @rows2 int, @rows int, @row int
declare @rBezeichnung varchar(80), @rwBetrag float
--
select @aID1 = aID from abschnitt where aID = (
  select top 1 aID from abschnitt 
  where aWasserkoerper = @wkID and exists(select 1 from referenzwert where rwAbschnitt = aID and isnull(rwBetrag, 0) > 0)
  order by cast(isnull(aOrdnung, 0) as varchar) + aBezeichnung
)
select @rows1 = count(rwID) from referenzwert where rwAbschnitt = @aID1 and isnull(rwBetrag, 0) > 0
--
select @aID2 = aID from abschnitt where aID = (
  select top 1 aID from abschnitt 
  where aWasserkoerper = @wkID and exists(select 1 from referenzwert where rwAbschnitt = aID and isnull(rwBetrag, 0) > 0) and aID <> @aID1 
  order by cast(isnull(aOrdnung, 0) as varchar) + aBezeichnung
)
select @rows2 = count(rwID) from referenzwert where rwAbschnitt = @aID2 and isnull(rwBetrag, 0) > 0
select @rows = @rows1
if (@rows2 > @rows) select @rows = @rows2
--
create table #r (
	s1 varchar(255) null, 
	z1 float null, 
	s2 varchar(255) null, 
	z2 float null, 
	o1 int null,
	o2 int null
)
--
-- Kopf:
insert into #r (o1, o2, s1) values (1, 1, 'Referenzartenliste')
insert into #r (o1, o2, s1) select 1, 2, 'OWK-Name: ' + wkBezeichnung from wasserkoerper where wkID = @wkID
insert into #r (o1, o2, s1) select 1, 3, 'OWK-ID: ' + wkNummer from wasserkoerper where wkID = @wkID
insert into #r (o1, o2, s1) values (1, 4, 'alle Referenzanteile in %')
insert into #r (o1, o2, s1) values (1, 5, '')
insert into #r (o1, o2, s1, s2) values (1, 6, 'Referenz 1', 'Referenz 2')
insert into #r (o1, o2, s1) select 1, 7, aBezeichnung from abschnitt where aID = @aID1
update #r set s2 = (select aBezeichnung from abschnitt where aID = @aID2) where o1 = 1 and o2 = 7
--
insert into #r (o1, o2, s1) values (1, 8, '')
insert into #r (o1, o2, s1, z1, s2) select 1, 9, 'Summe', sum(isnull(rwBetrag, 0)), 'Summe' from referenzwert where rwAbschnitt = @aID1
update #r set z2 = (select sum(isnull(rwBetrag, 0)) from referenzwert where rwAbschnitt = @aID2) where o1 = 1 and o2 = 9
--
-- Zeilennummern:
select @row = 1
while (@row <= @rows) begin
	insert into #r (o1, o2) values (2, @row)
	select @row = @row + 1
end
-- Referenz1:
select @row = 1
declare rwCur cursor for 
	select rBezeichnung, rwBetrag from referenzwert join referenz on rwReferenz = rID where rwAbschnitt = @aID1 and isnull(rwBetrag, 0) > 0 order by rwBetrag desc
open rwCur
fetch next from rwCur into @rBezeichnung, @rwBetrag
while (@@fetch_status <> -1) begin
	update #r set s1 = @rBezeichnung, z1 = @rwBetrag where o1 = 2 and o2 = @row
	select @row = @row + 1
	fetch next from rwCur into @rBezeichnung, @rwBetrag
end
close rwCur
deallocate rwCur
-- Referenz2:
select @row = 1
declare rwCur cursor for 
	select rBezeichnung, rwBetrag from referenzwert join referenz on rwReferenz = rID where rwAbschnitt = @aID2 and isnull(rwBetrag, 0) > 0 order by rwBetrag desc
open rwCur
fetch next from rwCur into @rBezeichnung, @rwBetrag
while (@@fetch_status <> -1) begin
	update #r set s2 = @rBezeichnung, z2 = @rwBetrag where o1 = 2 and o2 = @row
	select @row = @row + 1
	fetch next from rwCur into @rBezeichnung, @rwBetrag
end
close rwCur
deallocate rwCur
--
-- Fuß:
--insert into #r (o1, o2, s1) values (3, 3, '')
--insert into #r (o1, o2, s1) values (3, 4, 'alle Referenzanteile in %')
--insert into #r (o1, o2, s1, s2) values (3, 5, 'Referenz 1: Mündung', 'Referenz 2: Quelle')
--
-- Ausgabe:
select s1, z1, ' ' as Abstand, s2, z2 from #r order by o1, o2
--
drop table #r


END


GO
GRANT EXECUTE ON [dbo].[doc_referenzarten] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[doc_referenzarten] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[doc_statistik]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
--
CREATE PROCEDURE [dbo].[doc_statistik] (
	@nID int,
	@psnr varchar(40), 
	@gID int,
	@wk char(1),
	@wknr varchar(80),
	@gwtyp char(1),
	@gattung char(1),
	@fID int = null, 
	@Dat_von DateTime, 
	@Dat_bis DateTime,
	@HR char(1) = 'F',
	@debug bit = 1
) AS
/* liefert Summen und Anzahlen total und nach Jahren
  2009-03-09 klopfer: erstellt
  2009-04-05 klopfer: @wk hinzu
  2011-07-02 klopfer: schließt Leereinträge aus ('keine Fische')
  2012-07-23 klopfer: Option @HR  
  2015-12-01 klopfer: arg @psnr auf vc40
  2018-10-08 klopfer: einschlägige Arten vorab gesammelt (Laufzeit)
  2019-07-07 klopfer: @gattung hinzu; psNummer
  2019-08-02 klopfer: Abschnittsauswahl hinzu
*/

if (@debug = 1) begin
	delete from profiler
	insert into profiler(pfZeit, pfAktion) values (getdate(), 'into doc_statistik')
end

-- konstanten:
declare @MinDate datetime, @MaxDate datetime
select @MinDate = convert(datetime, '01.01.1900', 104), @MaxDate = convert(datetime, '01.01.3000', 104)

-- variablen:
declare @sql varchar(8000)
declare @zvkxOptionGemeinden char(1), @zvkxListe1Gemeinden varchar(4000), @zvkxOptionLandkreise char(1), @zvkxListe1Landkreise varchar(4000), @zvkxListe2Landkreise varchar(4000)
declare @zvkxOption char(1), @zvkxListe1 varchar(4000), @zvkxListe2 varchar(4000)
Declare @gID_Cur int
Declare @Probestrecken varchar(4000), @Gemeinden varchar(4000), @Hoehenlagen varchar(4000), @Fischarten varchar(4000), @Fischregionen varchar(4000), @Krebsarten varchar(4000)
Declare @NL char(2), @ALLE varchar(10)

Select @NL = CHAR(13) + CHAR(10)
select @ALLE = ' alle'

-- alle betroffenen Arten:
create table #f (fID int)
insert into #f (fID) select fID from fischart where fGattung = ISNULL(@gattung, fGattung) and fBez_deutsch not like '%keine %'

-- alle betroffenen probestellen bestimmen:
--
Create Table #ps (psID int Null, jahr int null, psHochgerechnet char(1) null)

select @sql = 'insert into #ps (psID, jahr, psHochgerechnet) select psID, datepart(yy, isnull(psDatum, ps.UPD_TIME)), psHochgerechnet '
select @sql = @sql + ' From probestelle ps '
select @sql = @sql + ' Where 1 = 1 '
if (@psnr is not null) select @sql = @sql + ' and psNummer Like ''' + @psnr + '%'' '
if (@gID is not null) select @sql = @sql + 'and isnull(psGebiets_kz, -1)  = ' + ltrim(str(@gID)) + ' ' 
if (@Dat_von is not null) select @sql = @sql + ' and psDatum >= convert(datetime, ''' + convert(varchar(10), @Dat_von, 104) + ''', 104) '
if (@Dat_bis is not null) select @sql = @sql + ' and psDatum <= convert(datetime, ''' + convert(varchar(10), @Dat_bis, 104) + ''', 104) '
if (@wknr is not null) select @sql = @sql + ' and exists(select 1 from abschnitt join wasserkoerper on aWasserkoerper = wkID where aID = psAbschnitt and (wkNummer like ''' + @wknr + '%'' or wkBezeichnung like ''' + @wknr + '%'')) '
if (@wk <> 'U') select @sql = @sql + ' and psAbschnitt is ' + case when @wk = 'T' then 'not' else '' end + ' null '
if (@gwtyp is not null) select @sql = @sql + ' and psGwTyp = ''' + @gwtyp + ''' '
if (@gattung is not null) select @sql = @sql + ' and psGattung = ''' + @gattung + ''' '

-- Gemeiden (abhaengig von Landkreisen):
select @zvkxOptionLandkreise = zvkxOption, @zvkxListe1Landkreise = convert(varchar(4000), zvkxListe1), @zvkxListe2Landkreise = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'landkreise'
if (@zvkxOptionLandkreise = 'A') select @zvkxListe2Landkreise = 'alle'
select @zvkxOptionGemeinden = zvkxOption, @zvkxListe1Gemeinden = convert(varchar(4000), zvkxListe1) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'gemeinden'
if (right(@zvkxListe1Gemeinden, 1) = ',') select @zvkxListe1Gemeinden = substring(@zvkxListe1Gemeinden, 1, datalength(@zvkxListe1Gemeinden) - 1)
if (isnull(@zvkxOptionGemeinden, 'K') = 'K') 
  select @sql = @sql + ' and 1 = 0 '
else 
  if (isnull(@zvkxOptionGemeinden, 'K') = 'A')  and (isnull(@zvkxOptionLandkreise, 'K') = 'A') select @sql = @sql + '' else select @sql = @sql + ' and psGemeinde in (' + @zvkxListe1Gemeinden + ') '
--
-- Abschnitte:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'abschnitte'
if (isnull(@zvkxOption, 'U') not in ('U', 'A')) begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and psAbschnitt in (' + @zvkxListe1 + ') '
end

-- anlaesse:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'anlaesse'
if (@zvkxOption <> 'A') begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and ( psBetreff in (' + @zvkxListe1 + ') or '
  if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @sql = @sql + ' psBetreff is null ) ' else select @sql = @sql + ' 1 = 0 ) '
end
-- fischreg:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'fischreg'
if (@zvkxOption <> 'A') begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and ( psFischreg in (' + @zvkxListe1 + ') or '
  if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @sql = @sql + ' psFischreg is null ) ' else select @sql = @sql + ' 1 = 0 ) '
end
-- erfkat:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'erfkat'
if (@zvkxOption <> 'A') begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and ( psErfass_Kat in (' + @zvkxListe1 + ') or '
  if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @sql = @sql + ' psErfass_Kat is null ) ' else select @sql = @sql + ' 1 = 0 ) '
end
-- TK:
select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'tk'
if (@zvkxOption <> 'A') begin
  if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
  select @sql = @sql + ' and ( psTKnr_name in (' + @zvkxListe1 + ') or '
  if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @sql = @sql + ' psTKnr_name is null ) ' else select @sql = @sql + ' 1 = 0 ) '
end
--
exec (@sql)

if (@debug = 1) insert into profiler (pfZeit, pfAktion) values (getdate(), '#ps geladen')

-- ausgabetabelle:
Create Table #out (
  jahr varchar(10) null,
  flg int null, -- Fließgewässer
  stg int null, -- Standgewässer
  bef int null,  -- Befischungen
  strecke float null,  -- befischte Strecke
  arten int null,  -- gefangene Arten
  indiv int null, -- gefangene Individuen
  von datetime null,
  bis datetime null,
  ijahr int null
)

-- fuer jedes Jahr und die Totale ein Eintrag:
insert into #out (jahr, ijahr) values (@ALLE, 0)
insert into #out (ijahr) select distinct(datepart(yy, psDatum)) from #ps join probestelle ps on #ps.psID = ps.psID where psDatum >= isnull(@Dat_von, @MinDate) and psDatum <= isnull(@Dat_bis, @MaxDate)
--
if (@debug = 1) insert into profiler (pfZeit, pfAktion) values (getdate(), '#out: Jahre geladen')

update #out set flg = (select Count(DISTINCT psGebiets_kz) From #ps join probestelle ps on #ps.psID = ps.psID and psGwTyp = 'F')
where ijahr = 0
update #out set flg = (select Count(DISTINCT psGebiets_kz) 
  From #ps join probestelle ps on #ps.psID = ps.psID and psGwTyp = 'F'
  where #ps.jahr = #out.ijahr)
where ijahr > 0

update #out set stg = (select Count(DISTINCT psGebiets_kz) From #ps join probestelle ps on #ps.psID = ps.psID and psGwTyp = 'S')
where ijahr = 0
update #out set stg = (select Count(DISTINCT psGebiets_kz) 
  From #ps join probestelle ps on #ps.psID = ps.psID and psGwTyp = 'S'
  where #ps.jahr = #out.ijahr)
where ijahr > 0

update #out set bef = (select Count(psID) From #ps) where ijahr = 0
update #out set bef = (select Count(psID) From #ps where #ps.jahr = #out.ijahr) where ijahr > 0

update #out set strecke = (select Sum(psGwStrecke_eff) / 1000. From #ps join probestelle ps on #ps.psID = ps.psID where (psGwTyp = 'F' or psGattung = 'K'))
where ijahr = 0
update #out set strecke = (select Sum(psGwStrecke_eff) / 1000.
  From #ps join probestelle ps on #ps.psID = ps.psID
  where (psGwTyp = 'F' or psGattung = 'K') and #ps.jahr = #out.ijahr)
where ijahr > 0

if (@debug = 1) insert into profiler (pfZeit, pfAktion) values (getdate(), '#ps: Probestreckendaten geladen')

-- gefangene verschiedene Arten (die Daten des wiss.FP sind auch im Standard-FP zusammengefasst enthalten):
update #out set arten = (
	select Count(DISTINCT fID) 
	From #ps join probestelle ps on #ps.psID = ps.psID 
		join fangprot on ps.psID = fpProbestelle * case when @HR = 'T' and isnull(ps.psHochgerechnet, 'F') = 'T' then -1 else 1 end
		join #f on fpFischart = fID
		)
where ijahr = 0

update #out set arten = (
	select Count(DISTINCT fpFischart) 
	From #ps join probestelle ps on #ps.psID = ps.psID 
		join fangprot on ps.psID = fpProbestelle * case when @HR = 'T' and isnull(ps.psHochgerechnet, 'F') = 'T' then -1 else 1 end
		join #f on fpFischart = fID
	where #ps.jahr = #out.ijahr
	)
where ijahr > 0

if (@debug = 1) insert into profiler (pfZeit, pfAktion) values (getdate(), '#ps: Arten geladen')

-- gefangene Fische:
update #out set indiv = (
	select sum(fpAnz_ges) 
	From #ps join probestelle ps on #ps.psID = ps.psID 
		join fangprot on #ps.psID = fpProbestelle * case when @HR = 'T' and isnull(#ps.psHochgerechnet, 'F') = 'T' then -1 else 1 end
		join #f on fpFischart = fID
		)
where ijahr = 0
update #out set indiv = (
	select sum(fpAnz_ges) 
	From #ps join probestelle ps on #ps.psID = ps.psID 
		join fangprot on #ps.psID = fpProbestelle * case when @HR = 'T' and isnull(#ps.psHochgerechnet, 'F') = 'T' then -1 else 1 end
		join #f on fpFischart = fID
	where #ps.jahr = #out.ijahr
	)
where ijahr > 0
--

-- Jahr als Text und Zeitbereich:
update #out set jahr = cast (ijahr as varchar) where ijahr > 0
update #out set von = @Dat_von, bis = @Dat_bis
--
if (@debug = 1) insert into profiler (pfZeit, pfAktion) values (getdate(), '#ps alles geladen')

-- ausgeben:
Select * From #out Order by jahr
-- aufraeumen:
drop table #f
Drop Table #ps
Drop Table #out


GO
GRANT EXECUTE ON [dbo].[doc_statistik] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[doc_statistik] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[fpw2fp]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE  PROCEDURE [dbo].[fpw2fp] (@psID int) AS
/* history:
  2006-07-30	klopfer: Größengruppe 0<2 integriert
  2007-04-28	klopfer: getrennt nach Fischen und Krebsen
  2007-05-14	klopfer: bei Krebsen: obere Klassengrenze immer .9, nicht 0; max. Stueckmasse wurde fehlgelenkt into avgStueckmasse
  2008-05-09	klopfer: rundet fpwTotallaenge vor der Einordnung in die Gruppen
*/

Create Table #AnzGruppen(
  psID int Null, fischart int Null,
  anz_0_2 int null, anz_1_4 int Null, anz_5_9 int Null, anz_10_14 int Null, anz_15_19 int Null, anz_20_24 int Null, anz_25_29 int Null, anz_30_39 int Null, anz_40_49 int Null, anz_50_59 int Null, anz_60_69 int Null, anz_70_n  int Null,
  anz_ges int Null, weibchen_ges int null, gewicht_ges float Null, gewicht_max float null
)
--
Insert into #AnzGruppen (psID, fischart) Select @psID, fpwFischart 
From fangprot_wiss Where fpwProbestelle = @psID
Group by fpwFischart

if (dbo.f_psGattung(@psID) = 'K') begin
  Update #AnzGruppen Set anz_ges = (Select Count(*) From fangprot_wiss Where fpwProbestelle = @psID And fpwFischart = fischart)
  Update #AnzGruppen Set weibchen_ges = (Select Count(*) From fangprot_wiss Where fpwProbestelle = @psID And fpwFischart = fischart and fpwGeschlecht = 'w')
  Update #AnzGruppen Set gewicht_ges = (Select Sum(fpwStueckmasse_g) From fangprot_wiss Where fpwProbestelle = @psID And fpwFischart = fischart)
  Update #AnzGruppen Set gewicht_max = (Select Max(fpwStueckmasse_g) From fangprot_wiss Where fpwProbestelle = @psID And fpwFischart = fischart)
  --
  Update #AnzGruppen Set anz_0_2 = (Select Count(*) From fangprot_wiss Where fpwProbestelle = @psID And fpwFischart = fischart And cast (fpwTotallaenge as decimal (10, 1)) Between 0 and 4.9)
  Update #AnzGruppen Set anz_1_4 = (Select Count(*) From fangprot_wiss Where fpwProbestelle = @psID And fpwFischart = fischart And cast (fpwTotallaenge as decimal (10, 1)) Between 5 and 6.9)
  Update #AnzGruppen Set anz_5_9 = (Select Count(*) From fangprot_wiss Where fpwProbestelle = @psID And fpwFischart = fischart And cast (fpwTotallaenge as decimal (10, 1)) Between 7 and 8.9)
  Update #AnzGruppen Set anz_10_14 = (Select Count(*) From fangprot_wiss Where fpwProbestelle = @psID And fpwFischart = fischart And cast (fpwTotallaenge as decimal (10, 1)) Between 9 and 10.9)
  Update #AnzGruppen Set anz_15_19 = (Select Count(*) From fangprot_wiss Where fpwProbestelle = @psID And fpwFischart = fischart And cast (fpwTotallaenge as decimal (10, 1)) Between 11 and 12.9)
  Update #AnzGruppen Set anz_20_24 = (Select Count(*) From fangprot_wiss Where fpwProbestelle = @psID And fpwFischart = fischart And cast (fpwTotallaenge as decimal (10, 1)) Between 13 and 14.9)
  Update #AnzGruppen Set anz_25_29 = (Select Count(*) From fangprot_wiss Where fpwProbestelle = @psID And fpwFischart = fischart And cast (fpwTotallaenge as decimal (10, 1)) Between 15 and 16.9)
  Update #AnzGruppen Set anz_30_39 = (Select Count(*) From fangprot_wiss Where fpwProbestelle = @psID And fpwFischart = fischart And cast (fpwTotallaenge as decimal (10, 1)) >= 17)
end 
else begin
  Update #AnzGruppen Set anz_ges = (Select Count(*) From fangprot_wiss Where fpwProbestelle = @psID And fpwFischart = fischart)
  Update #AnzGruppen Set gewicht_ges = (Select Sum(fpwStueckmasse_g) / 1000.0 From fangprot_wiss Where fpwProbestelle = @psID And fpwFischart = fischart)
  --
  Update #AnzGruppen Set anz_0_2 = (Select Count(*) From fangprot_wiss Where fpwProbestelle = @psID And fpwFischart = fischart And cast (fpwTotallaenge as decimal (10, 1)) Between 0 and 1.9)
  Update #AnzGruppen Set anz_1_4 = (Select Count(*) From fangprot_wiss Where fpwProbestelle = @psID And fpwFischart = fischart And cast (fpwTotallaenge as decimal (10, 1)) Between 2 and 4.9)
  Update #AnzGruppen Set anz_5_9 = (Select Count(*) From fangprot_wiss Where fpwProbestelle = @psID And fpwFischart = fischart And cast (fpwTotallaenge as decimal (10, 1)) Between 5 and 9.9)
  Update #AnzGruppen Set anz_10_14 = (Select Count(*) From fangprot_wiss Where fpwProbestelle = @psID And fpwFischart = fischart And cast (fpwTotallaenge as decimal (10, 1)) Between 10 and 14.9)
  Update #AnzGruppen Set anz_15_19 = (Select Count(*) From fangprot_wiss Where fpwProbestelle = @psID And fpwFischart = fischart And cast (fpwTotallaenge as decimal (10, 1)) Between 15 and 19.9)
  Update #AnzGruppen Set anz_20_24 = (Select Count(*) From fangprot_wiss Where fpwProbestelle = @psID And fpwFischart = fischart And cast (fpwTotallaenge as decimal (10, 1)) Between 20 and 24.9)
  Update #AnzGruppen Set anz_25_29 = (Select Count(*) From fangprot_wiss Where fpwProbestelle = @psID And fpwFischart = fischart And cast (fpwTotallaenge as decimal (10, 1)) Between 25 and 29.9)
  Update #AnzGruppen Set anz_30_39 = (Select Count(*) From fangprot_wiss Where fpwProbestelle = @psID And fpwFischart = fischart And cast (fpwTotallaenge as decimal (10, 1)) Between 30 and 39.9)
  Update #AnzGruppen Set anz_40_49 = (Select Count(*) From fangprot_wiss Where fpwProbestelle = @psID And fpwFischart = fischart And cast (fpwTotallaenge as decimal (10, 1)) Between 40 and 49.9)
  Update #AnzGruppen Set anz_50_59 = (Select Count(*) From fangprot_wiss Where fpwProbestelle = @psID And fpwFischart = fischart And cast (fpwTotallaenge as decimal (10, 1)) Between 50 and 59.9)
  Update #AnzGruppen Set anz_60_69 = (Select Count(*) From fangprot_wiss Where fpwProbestelle = @psID And fpwFischart = fischart And cast (fpwTotallaenge as decimal (10, 1)) Between 60 and 69.9)
  Update #AnzGruppen Set anz_70_n = (Select Count(*) From fangprot_wiss Where fpwProbestelle = @psID And fpwFischart = fischart And cast (fpwTotallaenge as decimal (10, 1)) > 69.9)
end
--
-- Alte Daten dieser Probestelle löschen
Delete From fangprot Where fpProbestelle = @psID
--
Insert into fangprot (
  fpProbestelle, fpFischart,
  fpAnz_0_2, fpAnz_1_4, fpAnz_5_9, fpAnz_10_14, fpAnz_15_19, fpAnz_20_24, fpAnz_25_29, fpAnz_30_39, fpAnz_40_49, fpAnz_50_59, fpAnz_60_69, fpAnz_70_n, 
  fpAnz_ges, fpWeibchen, fpGewicht_ges, fpGewicht_max
)
Select
  psID, fischart,
  anz_0_2, anz_1_4, anz_5_9, anz_10_14, anz_15_19, anz_20_24, anz_25_29, anz_30_39, anz_40_49, anz_50_59, anz_60_69, anz_70_n,
  anz_ges, weibchen_ges, gewicht_ges, gewicht_max
From #AnzGruppen
--
-- totale Fang-Anzahl berechnen:
--update probestelle set psFangzahl = (select count(*) from fangprot_wiss where fpwProbestelle = @psID) where psID = @psID
--
Drop Table #AnzGruppen
--


GO
GRANT EXECUTE ON [dbo].[fpw2fp] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[fpw2fp] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[GIS]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[GIS] (
	-- aufrufvariante 1: aus den berichten heraus:
	@nID int, -- kommt immer
	@gkz varchar(40) = null, -- ab hier nur bei Aufruf aus den Berichten heraus
	@gID int = null, 
	@wknr varchar(80) = null,
	@gwtyp char(1) = null, 
	@fID int = null, 
	@Dat_von varchar(10) = null, 
	@Dat_bis varchar(10) = null, 
	@fpw char(1) = null,
	@nID2 int = null, -- bei Aufruf aus dem erfassungsprotokoll heraus
	@rs int = 0 -- 0: ohne result set (ArcGIS), ArcView: 1: Probestrecken, 2: Fischarten als result set
	, @debug bit = 1
) AS
/* liefert Daten fuer das GIS

exec dbo.GIS @nID = 999, @debug = 1
select * from profiler
select * from GDT.Client

NICHT mehr relevant:  
  Beachten, da die GDV-views indiziert sind:
  Wenn SET QUOTED_IDENTIFIER auf OFF festgelegt ist, können Literalzeichenfolgen in Ausdrücken in einfache oder doppelte Anführungszeichen eingeschlossen werden. 
  Eine in doppelte Anführungszeichen eingeschlossene Literalzeichenfolge kann eingebundene einfache Anführungszeichen, wie z. B. Apostrophe, enthalten.
  SET QUOTED_IDENTIFIER muss beim Erstellen oder Ändern von Indizes auf berechneten Spalten oder indizierten Sichten auf ON festgelegt sein. 
  Wenn SET QUOTED_IDENTIFIER auf OFF festgelegt ist, schlagen die CREATE-, UPDATE-, INSERT- und DELETE-Anweisungen in Tabellen mit Indizes auf berechneten Spalten oder indizierten Sichten fehl. 
  Der SQL Server Native Client-ODBC-Treiber und der SQL Server Native Client-OLE DB-Anbieter für SQL Server legen beim Herstellen einer Verbindung QUOTED_IDENTIFIER automatisch auf ON fest. 
  Diese Einstellung kann in ODBC-Datenquellen, in ODBC-Verbindungsattributen oder in OLE DB-Verbindungseigenschaften konfiguriert werden. 
  SET QUOTED_IDENTIFIER ist für Verbindungen von DB-Library-Anwendungen standardmäßig auf OFF festgelegt.

  2005-04-19	keyn: ueberarbeitet, mehrfachauswahl von Kreisen und Gemeinden (ursprung: fritsche)
  2005-05-19	keyn: nun wieder mit argument @psID (wird aus dem Erfassungsprotokoll für eine Probestelle heraus aufgerufen)
  2005-10-20	klopfer: 3 weitere Spalten im ps-resultset; liefert nun im 2. set auch wirklich die Stueckzahl (bisher blind)
  2006-09-28f.	klopfer: @kID_erf_kat und @kID_fisch_reg stillgelegt (statt dessen zv_kontext-Mehrfachauswahl); nun auch Mehrfachauswahl Anlässe; setzt @psID (das ist z.Zt. der @nID in den @ll_psID um)
  2006-10-07	klopfer: liefert nun auch Daten fuer ps, wenn noch kein fp existiert
  2007-04-15	klopfer: @psID zu @nID2 umbenannt; nun auch fuer mehrere explizit gewaehlte ps
  2007-04-18	klopfer: args @wknr und @gwtyp; weitere Ausgabefelder
  2007-06-25	klopfer: nun kDaten statt ID fuer t_Praedikat
  2008-10-04	klopfer: Note und Prädikat nun aus Tabelle gesamtbewertung
  2009-03-03	klopfer: Zeichenanzahl bei Kreis/Gemeinde-Variablen auf 4000
  2010-02-15	klopfer: @rs hinzu
  2012-04-23	klopfer: psFischreg_Bem hinzu
  2012-12-28f.	klopfer: berechnet nun ggf. t_multi_group; neue DbStruktur; Dat als varchar
  2013-01-16f.	klopfer: Bewertung des der ps zugeordneten Abschnittes, nicht nur für die zur Bewertung ausgewählten ps; Fischarten auch nach Lokationen
  2013-01-30	klopfer: neue Bezeichner
  2013-02-18	klopfer: striktere Löschregelung
  2015-10-05	klopfer: GEWKZ und Befischungsrichtung hinzu
  2015-11-21	klopfer: abhängig von Benutzereinstellung GK- oder UTM-Koordinaten
  2015-12-01	klopfer; Arg @psnr vc40; Umrechnung nicht bei UTM-Koord
  2016-04-08	klopfer: alles left outer join; am Ende Daten für ArcView nicht löschen; Korrektur: cast bNote as varchar (muss genügend Stellen bieten)
  2018-10-05	klopfer: unbedingt UTM-Koordinaten; auch: keine GKK-Umrechnung mehr
  2019-07-01	klopfer: @gkz statt @psnr; OWK_ID mit Präfix DESN_
  2019-08-02	klopfer: Abschnittsauswahl hinzu
  2019-09-14ff.	klopfer: für ArcGIS: Variante EineTabelleProClient hinzu
  2019-09-24	klopfer: für ArcGIS nur ausführen, wenn der Client identifiziert werden konnte
  2019-10-02	klopfer: Syntaxkorrektur beim Einzelartennachweis (@fID not null); für mehr Zieltabellen; auch für T??ArtGesamt; auch Feld BezeichnungUndStueckzahl
*/
-- konstanten:
declare @MinDate datetime, @MaxDate datetime
select @MinDate = '01.01.1900', @MaxDate = '01.01.3000'
-- variablen:
declare @sql nvarchar(max), @where nvarchar(max)
declare @psIDs varchar(max)
declare @zvkxOptionGemeinden char(1), @zvkxListe1Gemeinden nvarchar(max), @zvkxOptionLandkreise char(1), @zvkxListe1Landkreise nvarchar(max), @zvkxListe2Landkreise nvarchar(max)
declare @zvkxOption char(1),  @zvkxListe1 nvarchar(max), @zvkxListe2 nvarchar(max)
Declare @Probestrecken nvarchar(max), @Gemeinden nvarchar(max), @Hoehenlagen nvarchar(max), @Fischregionen nvarchar(max), @Fischarten nvarchar(max)
declare @Fischanz int
Declare @NL char(2)
Select @NL = CHAR(13) + CHAR(10)
declare @ll_psID int
declare @TNr varchar(5)
declare @ct int, @clNummer int
declare @table varchar(40), @pkbez varchar(40)

if (@debug = 1) begin
	delete from profiler
	insert into profiler (pfZeit, pfAktion) values (getdate(), 'into GIS')
end

select @clNummer = (select min(clNummer) from GDT.Client where clName = HOST_NAME())
if @clNummer is null and (@rs = 0) return

if (@debug = 1) insert into profiler (pfZeit, pfAktion) values (getdate(), '   GIS: HOST identifiziert')

select @TNr = 'T' + dbo.f_0filled(cast(@clNummer as varchar), 2)

/*******************
	alle vorhandenen Daten löschen:
	********************************************************/

if (@rs = 0) begin
	-- für ArcGIS aufgerufen
	-- Version AllesInEinerTabelle: alles löschen (außer Daten von Benutzern mit eigenem Login bei der ArcGIS-Datenbankverbindung)
	delete from GDT.Art where _Kontext = @nID or exists(select 1 from zv_benutzer where zvbID = _Kontext and ISNULL(zvbMitLogin2, 'F') = 'F')
	delete from GDT.Probestelle where _Kontext = @nID or exists(select 1 from zv_benutzer where zvbID = _Kontext and ISNULL(zvbMitLogin2, 'F') = 'F')
	delete from GDT.Lokation where _Kontext = @nID or exists(select 1 from zv_benutzer where zvbID = _Kontext and ISNULL(zvbMitLogin2, 'F') = 'F')

	-- Version EineTabelleProClient:
	exec ('delete from GDT.' + @TNr + 'Probestelle')
	exec ('delete from GDT.' + @TNr + 'Art')
	exec ('delete from GDT.' + @TNr + 'ArtGesamt')

	if (@debug = 1) insert into profiler (pfZeit, pfAktion) values (getdate(), '   GIS: bisherige Daten gelöscht')

end
else begin
	-- für ArcView aufgerufen; defensiv eigene Daten löschen:
	delete from GDT.Art where _Kontext = @nID
	delete from GDT.Probestelle where _Kontext = @nID
	delete from GDT.Lokation where _Kontext = @nID
end


/*******************
	betroffene Probestellen bestimmen (where-Klausel):
	*********************************************************/

if (@nID2 is not null) begin
  -- Erfassungsprotokoll: explizite Auswahl
  select @psIDs = zvkxListe1 from zv_kontextX where zvkxBenutzer = @nID2 and lower(zvkxTyp) = lower('psExport')
  select @where = ' psID in (' + @psIDs + ') ' 
end
else begin
  -- Berichte: mit Suchbegriffen für Probestellen:
  select @where = ' 1 = 1 '
  if (@gkz is not null) select @where = @where + ' and (select gGebiets_kz from gebiets_kz where gID = psGebiets_kz) Like ''' + @gkz + '%'' '
  if (@gID is not null) select @where = @where + 'and isnull(psGebiets_kz, -1)  = ' + ltrim(str(@gID)) + ' ' 
  if (@Dat_von is not null) select @where = @where + ' and psDatum >= convert(datetime, ''' + convert(varchar(10), @Dat_von, 104) + ''', 104) '
  if (@Dat_bis is not null) select @where = @where + ' and psDatum <= convert(datetime, ''' + convert(varchar(10), @Dat_bis, 104) + ''', 104) '
  if (@fID is not null) select @where = @where + 'and exists (select 1 from fangprot where fpProbestelle = psID and isnull(fpFischart, -1)  = ' + ltrim(str(@fID)) + ') ' 
  if (isnull(@fpw, 'F') = 'T') select @where = @where + ' and IsNull(psFangprot_wiss, ''F'') = ''T'' '
  if (@wknr is not null) select @where = @where + ' and exists(select 1 from abschnitt join wasserkoerper on aWasserkoerper = wkID where aID = psAbschnitt and (wkNummer like ''' + @wknr + '%'' or wkBezeichnung like ''' + @wknr + '%'')) '
  if (@gwtyp is not null) select @where = @where + ' and psGwTyp = ''' + @gwtyp + ''' '

  -- Landkreise, Gemeinden:
  select @zvkxOptionLandkreise = zvkxOption, @zvkxListe1Landkreise = convert(varchar(4000), zvkxListe1), @zvkxListe2Landkreise = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'landkreise'
  if (@zvkxOptionLandkreise = 'A') select @zvkxListe2Landkreise = 'alle'
  select @zvkxOptionGemeinden = zvkxOption, @zvkxListe1Gemeinden = convert(varchar(4000), zvkxListe1) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'gemeinden'
  if (right(@zvkxListe1Gemeinden, 1) = ',') select @zvkxListe1Gemeinden = substring(@zvkxListe1Gemeinden, 1, datalength(@zvkxListe1Gemeinden) - 1)
  if (isnull(@zvkxOptionGemeinden, 'K') = 'K') 
    select @where = @where + ' and 1 = 0 '
  else 
    if (isnull(@zvkxOptionGemeinden, 'K') = 'A')  and (isnull(@zvkxOptionLandkreise, 'K') = 'A')
      select @where = @where + ''
    else
      select @where = @where + ' and psGemeinde in (' + @zvkxListe1Gemeinden + ') '

  -- Abschnitte:
  select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'abschnitte'
  if (isnull(@zvkxOption, 'U') not in ('U', 'A')) begin
    if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
    select @where = @where + ' and psAbschnitt in (' + @zvkxListe1 + ') '
  end
  -- anlaesse:
  select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'anlaesse'
  if (@zvkxOption <> 'A') begin
    if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
    select @where = @where + ' and ( psBetreff in (' + @zvkxListe1 + ') or '
    if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @where = @where + ' psBetreff is null ) ' else select @where = @where + ' 1 = 0 ) '
  end
  -- fischreg:
  select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'fischreg'
  if (@zvkxOption <> 'A') begin
    if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
    select @where = @where + ' and ( psFischreg in (' + @zvkxListe1 + ') or '
    if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @where = @where + ' psFischreg is null ) ' else select @where = @where + ' 1 = 0 ) '
  end
  -- erfkat:
  select @zvkxOption = zvkxOption, @zvkxListe1 = convert(varchar(4000), zvkxListe1), @zvkxListe2 = convert(varchar(4000), zvkxListe2) from zv_kontextX where zvkxBenutzer = @nID and zvkxTyp = 'erfkat'
  if (@zvkxOption <> 'A') begin
    if (isnull(@zvkxListe1, '') = '') select @zvkxListe1 = '0'
    select @where = @where + ' and ( psErfass_Kat in (' + @zvkxListe1 + ') or '
    if (charindex('<unbestimmt>', @zvkxListe2) > 0) select @where = @where + ' psErfass_Kat is null ) ' else select @where = @where + ' 1 = 0 ) '
  end
end


/*******************
	GDT.Lokation / Probestelle laden:
	*********************************************************/

--Version AllesInEinerTabelle
select @sql = '
insert into GDT.Lokation (X, Y, _Probestelle, _Kontext) 
select isnull(psUTM_R, 0), isnull(psUTM_H, 0) , psID, ' + STR(@nID) + '
from dbo.probestelle 
where ' + @where + '
Order by psID'
exec (@sql)


if (@rs = 0) begin -- für ArcGIS aufgerufen
	--Version EineTabelleProClient
	select @sql = '
	insert into GDT.' + @TNr + 'Probestelle (PSID, X, Y, Befischungsdatum, Probestrecke) 
	select psID, isnull(psUTM_R, 0), isnull(psUTM_H, 0), psDatum, psProbestrecke
	from dbo.probestelle 
	where ' + @where + '
	Order by psID'
	exec (@sql)

	if (@debug = 1) insert into profiler (pfZeit, pfAktion) values (getdate(), '   GIS: Probestellen geladen')
end
-- 
insert into GDT.Probestelle (Befischungsdatum, Probestrecke, LID, _Kontext, _Probestelle) 
select psDatum, psProbestrecke, LID, @nID, psID
from dbo.probestelle p join GDT.Lokation on p.psID = _Probestelle and _Kontext = @nID

-- Update weiterer Felder:
select @ct = 1
while (@ct <= case when (@rs = 0) /*für ArcGIS aufgerufen*/ then 2 else 1 end) begin -- für jede Version ein Durchlauf
	select @where = case when @ct = 1 then ' _Kontext = ' + cast(@nID as varchar) else ' 1 = 1 ' end
	select @table = case when @ct = 1 then 'GDT.Probestelle' else 'GDT.' + @TNr + 'Probestelle' end
	select @pkbez = case when @ct = 1 then '_Probestelle' else @table + '.PSID' end
	
	exec ('update ' + @table + ' set GesamtmasseProHa = (select SUM(isnull(fpGewicht_ha, 0)) from fangprot where fpProbestelle = ' + @pkbez + ') where ' + @where)
	exec ('update ' + @table + ' set Fischereiregion = (select left(kDaten, 30) from dbo.probestelle join katalog on psFischreg = kID where psID = ' + @pkbez + ') where ' + @where)
	exec ('update ' + @table + ' set oekologischerWert = (select left(kDaten, 30) from dbo.probestelle join katalog on psOekowert = kID where psID = ' + @pkbez + ') where ' + @where)
	exec ('update ' + @table + ' set Fischereiausuebender = (select erBezeichnung from dbo.probestelle join einrichtung on psEinrichtung_F = erID where psID = ' + @pkbez + ') where ' + @where) 
	exec ('update ' + @table + ' set GEWKZ = gGebiets_kz from gebiets_kz join dbo.probestelle p on gID = p.psGebiets_kz where p.psID = ' + @pkbez + ' and ' + @where) 
	exec ('update ' + @table + ' set OWKName = wkBezeichnung, OWKID = left(''DESN_'' + wkNummer, 20) from wasserkoerper join abschnitt on wkID = aWasserkoerper join dbo.probestelle p on aID = p.psAbschnitt where p.psID = ' + @pkbez + ' and ' + @where)
	-- Bewertung des der ps zugeordneten Abschnittes, nicht nur für die zur Bewertung ausgewählten ps:
	exec ('update ' + @table + ' set Bewertungsnote = (
		select left(CAST(max(isnull(bNote, 0)) as varchar(20)), 5)
		from dbo.probestelle join abschnitt on psAbschnitt = aID join bewertung b on aID = bAbschnitt
		where psID = ' + @pkbez + ' and bDatum = (select max(isnull(bDatum, 0)) from bewertung ba where ba.bAbschnitt = b.bAbschnitt)
		) where ' + @where)

	exec ('update ' + @table + ' set Bewertungspraedikat = [dbo].f_Praedikat4Note(cast(Bewertungsnote as float)) where ' + @where)
	exec ('update ' + @table + ' set Bewertet = ''F'' where ' + @where)
	exec ('update ' + @table + ' set Bewertet = ''T'' where Bewertungsnote is not null and ' + @where)
	exec ('update ' + @table + ' set Befischungsanlass = (select left(kDaten, 30) from dbo.probestelle join katalog on psBetreff = kID where psID = ' + @pkbez + ') where ' + @where)
	exec ('update ' + @table + ' set Fangquote = (select psFangquote from dbo.probestelle where psID =' + @pkbez + ') where ' + @where)
	exec ('update ' + @table + ' set befischteStrecke = (select cast(psGwStrecke_eff as varchar(10)) from dbo.probestelle where psID =' + @pkbez + ') where ' + @where)
	exec ('update ' + @table + ' set Befischungsrichtung = (select psBefischungsrichtung from dbo.probestelle where psID =' + @pkbez + ') where ' + @where)
	exec ('update ' + @table + ' set Landkreis = (select gemKreis from dbo.probestelle join gemeinde on psGemeinde = gemID where psID =' + @pkbez + ') where ' + @where)
	exec ('update ' + @table + ' set Gemeinde = (select gemName from dbo.probestelle join gemeinde on psGemeinde = gemID where psID =' + @pkbez + ') where ' + @where)
	exec ('update ' + @table + ' set Befischungsjahr = datepart(year, Befischungsdatum) where ' + @where)
	exec ('update ' + @table + ' set Bilddatei = (select psBilddatei from dbo.probestelle where psID =' + @pkbez + ') where ' + @where)
	exec ('update ' + @table + ' set Bemerkung = (select psFischreg_Bem from dbo.probestelle where psID =' + @pkbez + ') where ' + @where)
	
	if (ISNULL(@fID, 0) <> 0) begin
		-- beim Einzelartennachweis:
		-- Feststellung, ob mehrere Groessengruppen vorhanden sind: (diese Frage ist unabhängig davon, ob Hochrechnungen vorliegen)
		exec ('update ' + @table + ' Set Multigroup = ''Nein'' where ' + @where)
		select @sql = 'update ' + @table + ' Set Multigroup = ''Ja'' where dbo.f_psMultigroup(' + @pkbez + ', ' + cast(@fID as varchar) + ') = 1 and ' + @where; exec (@sql)
	end
	
	select @ct = @ct + 1

end -- while
if (@debug = 1) insert into profiler (pfZeit, pfAktion) values (getdate(), '   GIS: Probestellen-Eigenschaften geladen')


/*******************
	GDT.Art laden:
	*********************************************************/

-- Version AllesInEinerTabelle:
-- Summen nach Fischarten und Lokationen:
insert into GDT.Art (Bezeichnung, Gefaehrdung, Stueckzahl, LID, _Kontext, _Fischart)
Select fBez_deutsch, fGefaehrdung, sum(isnull(fpAnz_ges, 0)), LID, @nID, fID
From GDT.Probestelle, fangprot, fischart
Where fpProbestelle = _Probestelle And fID = fpFischart And fID = IsNull(@fID, fID) and _Kontext = @nID
Group by LID, fID, fBez_deutsch, fGefaehrdung
Order by LID, fBez_deutsch
-- Gesamtsummen nach Fischarten über alle Lokationen der gewählten Menge (Kennzeichen: LID = 0):
insert into GDT.Art (Bezeichnung, Gefaehrdung, Stueckzahl, LID, _Kontext, _Fischart)
Select fBez_deutsch, fGefaehrdung, sum(isnull(fpAnz_ges, 0)), 0, @nID, fID
From GDT.Probestelle, fangprot, fischart
Where fpProbestelle = _Probestelle And fID = fpFischart And fID = IsNull(@fID, fID) and _Kontext = @nID
Group by fID, fBez_deutsch, fGefaehrdung
Order by fBez_deutsch

if (@rs = 0) begin -- für ArcGIS aufgerufen
-- Version EineTabelleProClient:
-- Summen nach Fischarten und Lokationen:
select @sql = '
insert into GDT.' + @TNr + 'Art (AID, PSID, Bezeichnung, BezeichnungUndStueckzahl, Gefaehrdung, Stueckzahl)
Select fID, PSID, fBez_deutsch, fBez_deutsch + '' - '' + cast(sum(isnull(fpAnz_ges, 0)) as varchar) + '' St.'', fGefaehrdung, sum(isnull(fpAnz_ges, 0))
From GDT.' + @TNr + 'Probestelle, fangprot, fischart
Where fpProbestelle = PSID And fID = fpFischart ' + case when @fID is null then '' else ' and fID = ' + cast(@fID as varchar) end + ' and isnull(fpAnz_ges, 0) > 0
Group by PSID, fID, fBez_deutsch, fGefaehrdung
Order by PSID, fBez_deutsch '
exec (@sql)
-- Gesamtsummen nach Fischarten über alle Lokationen der gewählten Menge (Kennzeichen: PSID = 0):
select @sql = '
insert into GDT.' + @TNr + 'ArtGesamt (AID, PSID, Bezeichnung, BezeichnungUndStueckzahl, Gefaehrdung, Stueckzahl)
Select fID, 0, fBez_deutsch, fBez_deutsch + '' - '' + cast(sum(isnull(fpAnz_ges, 0)) as varchar) + '' St.'', fGefaehrdung, sum(isnull(fpAnz_ges, 0))
From GDT.' + @TNr + 'Probestelle, fangprot, fischart
Where fpProbestelle = PSID And fID = fpFischart ' + case when @fID is null then '' else ' and fID = ' + cast(@fID as varchar) end + ' and isnull(fpAnz_ges, 0) > 0
Group by fID, fBez_deutsch, fGefaehrdung
Order by fBez_deutsch '
exec (@sql)

end

if (@debug = 1) insert into profiler (pfZeit, pfAktion) values (getdate(), '   GIS: Arten geladen')


/***************************************************************************/

if (@rs = 1) 
	-- erstes result set: Probestrecken
	Select
		l._Probestelle as t_psID
		, Befischungsdatum as t_psDatum
		, Probestrecke as t_psProbestrecke
		, X as t_psGKK_R
		, Y as t_psGKK_H
		, Multigroup as t_multi_group
		, GesamtmasseProHa as t_Sum_kg_ha
		, Korr as t_Korr
		, Fischereiregion as t_Region
		, oekologischerWert as t_Oekowert
		, Fischereiausuebender as t_Berechtigter
		, GEWKZ as t_GEWKZ
		, OWKName as t_OWKName
		, OWKID as t_OWKID
		, Bewertungspraedikat as t_Praedikat
		, Bewertungsnote as t_Note
		, Bewertet as t_Bewertet
		, Befischungsanlass as t_Anlass
		, Fangquote as t_Fangquote
		, befischteStrecke as t_Strecke
		, Befischungsrichtung as t_Befischungsrichtung
		, Landkreis as t_Kreis
		, Gemeinde as t_Gemeinde
		, Befischungsjahr as t_Jahr
		, Bilddatei as t_Bilddatei
		, Bemerkung as t_Bemerkung
	From GDT.Lokation l join GDT.Probestelle p on l._Probestelle = p._Probestelle  --l.LID = p.LID
	where l._Kontext = @nID and p._Kontext = @nID
	order by Befischungsdatum, l._Probestelle

if (@rs = 2)	
	-- zweites result set: fischarten
	Select 
		_Fischart as fID
		, Bezeichnung as fBez_deutsch
		, Gefaehrdung as fGefaehrdung
		, Stueckzahl as Stueckzahl
	From GDT.Art
	where LID = 0 and _Kontext = @nID
	Order by Bezeichnung
--
if (@debug = 1)
	insert into profiler (pfZeit, pfAktion) values (getdate(), 'outta GIS')


GO
GRANT EXECUTE ON [dbo].[GIS] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[GIS] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[GIS_PufferLeeren]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create PROCEDURE [dbo].[GIS_PufferLeeren] 
AS
/* leert alle GIS-Puffertabellen
	2019-10-03	Klopfer: erstellt
	*/

declare @TNr int
declare @tab nvarchar(40)

-- obsolet:
delete from GDT.Art
delete from GDT.Lokation
delete from GDT.Probestelle

-- aktuell:
select @TNr = 0
while (@TNr < 15) begin
	select @TNr = @TNr + 1
	select @tab = '[GDT].[T' + dbo.f_0filled(cast(@TNr as varchar), 2) + 'Art]'; exec ('delete from ' + @tab)
	select @tab = '[GDT].[T' + dbo.f_0filled(cast(@TNr as varchar), 2) + 'ArtGesamt]'; exec ('delete from ' + @tab)
	select @tab = '[GDT].[T' + dbo.f_0filled(cast(@TNr as varchar), 2) + 'Probestelle]'; exec ('delete from ' + @tab)

end
GO
GRANT EXECUTE ON [dbo].[GIS_PufferLeeren] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[GIS_PufferLeeren] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[lst_bewertung]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[lst_bewertung] (@nID int, @bID int = null) AS
/* history:
  2007-04-10	klopfer: erstellt
  2007-04-12	klopfer: mit color
  2007-04-13f.	klopfer: Db-Aenderungen
  2007-04-18	klopfer: isnull(wWert, '0') bei Leitarten
  2007-08-16	klopfer: mit Praefix DESN
  2008-03-31	klopfer: lower(zvkTyp)
  2008-04-03	klopfer: nun mit teilcolor
  2008-10-01ff	klopfer: ordnet nun auch nach aBezeichnung; verwendet Tabelle gesamtbewertung
  2010-03-22	klopfer: Ordnung nach aOrdnung
  2010-03-30	klopfer: Ausgabe von aOrdnung
  2012-07-23	klopfer: aHMWB hinzu
  2014-03-22	klopfer: Ordnung nach convert(datetime, bDatum, ..); übernimmt nun where vom Frontend
*/
--
declare @src int, @dest int, @i int, @ct int
declare @sql varchar(2000), @dfelder varchar(2000), @dwerte varchar(2000), @where varchar(4000)
declare @m varchar(10), @mBezeichnung varchar(80)
--
-- temporaere Tabelle erzeugen (Feldnamen teilweise dynamisch aus mKlassifikation)::
select @sql = '
create table ##t (
	wkNummer varchar(30) null,
	wkBezeichnung varchar(80) null,
	aBezeichnung varchar(80) null,
	aOrdnung varchar(10) null,
	aHMWB varchar(4) null,
	gGewaesser varchar(80) null,
	bDatum varchar(20) null,
	Praedikat varchar(80) null,
	GNote varchar(30) null,
	Note varchar(30) null,
	bAnmerkungen text null,
	Probestellen varchar(255) null,
	AnzahlProben varchar(30) null,
	Strecke varchar(30) null
'
declare mCur cursor for select ltrim(rtrim(mKlassifikation)), mBezeichnung from masz order by mOrdnung
open mCur
fetch next from mCur into @m, @mBezeichnung
while (@@fetch_status <> -1) begin
	if (isnull(@m, '') <> '') select @sql = @sql + ', f' + @m + ' varchar(80) null'
	fetch next from mCur into @m, @mBezeichnung
end
close mCur
deallocate mCur
select @sql = @sql + ', color int null, teilcolor int null, tID int identity, bID int null, wkID int null)'
exec (@sql)
--
-- Kopfzeile laden:
select @sql = 'insert into ##t (wkNummer, wkBezeichnung, aBezeichnung, aOrdnung, aHMWB, gGewaesser, bDatum, Praedikat, GNote, Note, bAnmerkungen, Probestellen, AnzahlProben, Strecke'
--
select @dfelder = ''
select @dwerte = ''
declare mCur cursor for select ltrim(rtrim(mKlassifikation)), mBezeichnung from masz order by mOrdnung
open mCur
fetch next from mCur into @m, @mBezeichnung
while (@@fetch_status <> -1) begin
	if (isnull(@m, '') <> '') begin
		select @dfelder = @dfelder + ', f' + @m
		select @dwerte = @dwerte + ', ''' + @mBezeichnung + ''''
	end
	fetch next from mCur into @m, @mBezeichnung
end
close mCur
deallocate mCur
--
select @sql = @sql + @dfelder + ') values (''OWK-ID'', '' OWK-Name'', ''Abschnittsbezeichnung'', ''A-ID'', ''HMWB'', ''Gewässer'', ''Datum'', ''ökol. Zustand'', ''Note'', ''Teilnote'', ''Anmerkungen'', ''Probestellen'', ''Probenanzahl'', ''befischte Strecke (m)'''
select @sql = @sql + @dwerte + ')'
--
exec (@sql)
--
-- statische Inhalte laden:
select @sql = '
insert into ##t (
	wkNummer, wkBezeichnung, aBezeichnung, aOrdnung, aHMWB, gGewaesser, 
	bDatum, 
	Praedikat, GNote, Note, 
	bAnmerkungen, Probestellen, AnzahlProben, Strecke, 
	bID, wkID, color, teilcolor)
select 
	''DESN_'' + wkNummer, wkBezeichnung, aBezeichnung, aOrdnung, case when isnull(aHMWB, ''F'') = ''T'' then ''ja'' else '''' end, gGewaesser, 
	convert(varchar, bDatum, 104), 
	k1.kDaten, replace(cast (gbNote as decimal(4, 2)), ''.'', '',''), replace(cast (bNote as decimal(4, 2)), ''.'', '',''), 
	bAnmerkungen, dbo.f_Probestellen4bID(bID, char(13) + char(10)), dbo.f_AnzahlProben4bID(bID), dbo.f_Strecke4bID(bID), 
	bID, wkID, k1.kFarbe, k2.kFarbe
from bewertung join abschnitt on bAbschnitt = aID join wasserkoerper on aWasserkoerper = wkID join gebiets_kz on wkGebietsKz = gID join gesamtbewertung on bGesamtbewertung = gbID left outer join katalog k1 on gbPraedikat = k1.kID left outer join katalog k2 on bPraedikat = k2.kID
'
if (@bID is not null)
  select @sql = @sql + ' where bID = ' + str(@bID)
else begin
	-- where -Klausel aus dem Kontext holen:
	select @where = zvkxListe1 from zv_kontextX where zvkxBenutzer = @nID and lower(zvkxTyp) = lower('doc_bewertung')
	select @where = replace(@where, '~', '')
	select @sql = @sql + ' where ' + @where
	--select @sql = @sql + ' where exists(select zvkID from zv_kontext where zvkBenutzer = ' + str(@nID) + ' and lower(zvkTyp) = lower(''bID'') and zvkWert = bID)'
end
exec (@sql)
--
-- dynamische Inhalte laden:
declare mCur cursor for select ltrim(rtrim(mKlassifikation)) from masz order by mOrdnung
open mCur
fetch next from mCur into @m
while (@@fetch_status <> -1) begin
	if (isnull(@m, '') <> '') begin
		select @sql = 'update ##t set f' + @m + ' = case when mBezeichnung like ''%.Fischart'' then isnull(replace( cast(wBetrag as varchar), ''.'', '',''), ''0'') + '' '' + left(wert.wBezeichnung, 10) else replace( cast(wBetrag as varchar), ''.'', '','') end from wert join masz on wMasz = mID where wBewertung = ##t.bID and mKlassifikation = ''' + @m + ''''
		exec (@sql)
	end
	fetch next from mCur into @m
end
close mCur
deallocate mCur
--
-- Ausgeben:
if (@bID is not null) begin
	create table ##tv (tvBezeichnung varchar(80) null, tvWert varchar(20) null, tvOrdnung int null)
	--
	declare mCur cursor for select ltrim(rtrim(mKlassifikation)) from masz
	open mCur
	fetch next from mCur into @m
	while (@@fetch_status <> -1) begin
		if (isnull(@m, '') <> '') begin
			select @sql = 'insert into ##tv (tvBezeichnung, tvWert, tvOrdnung) select mBezeichnung, f' + @m + ', mOrdnung from masz, ##t where bID is not null and ltrim(rtrim(mKlassifikation)) = ''' + @m + ''''
			exec (@sql)
		end
		fetch next from mCur into @m
	end
	close mCur
	deallocate mCur
	--
	select * from ##tv order by tvOrdnung
	drop table ##tv
end
else
	select * from ##t order by wkBezeichnung, aOrdnung, aBezeichnung, case when isDate(bDatum) = 1 then convert(datetime, bDatum, 104) else 0 end
--
drop table ##t
--


GO
GRANT EXECUTE ON [dbo].[lst_bewertung] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[lst_bewertung] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[lst_bewertungC]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[lst_bewertungC] (@nID int, @excel int = 0) AS
/* history:
  2008-05-09	klopfer: erstellt
  2008-10-04	klopfer: zvkxTyp doc_bewertung statt lst_bewertungC; verwendet nun Tabelle gesamtbewertung
  2013-04-09	klopfer: Rundung der gbNote vor Umwandlung into char
  2014-03-22	klopfer: Ordnung nach convert(datetime, gbDatum..); Berechnung der Anzahlen über wk und Jahr statt gb
  2014-03-26	klopfer: ohne Klammer nach where
*/
--
declare @sql varchar(4000), @where varchar(4000), @ps varchar(4000), @modus varchar(255)
--
-- temporaere Tabelle erzeugen:
create table ##t (
	wkNummer varchar(30) null,
	wkBezeichnung varchar(80) null,
	gGewaesser varchar(80) null,
	gbDatum varchar(25) null,
	gbPraedikat varchar(80) null,
	gbNote varchar(30) null,
	Probestellen text null,
	AnzahlProben varchar(30) null,
	Strecke varchar(30) null,
	color int null,
	wkID int null, 
	checked char(1) null,
	Jahr varchar(4) null,
	-- ab hier nicht im dw:
	Ordnung1 int null
)
if (@excel = 1)
	-- Kopfzeile laden:
	insert into ##t (wkNummer, wkBezeichnung, gGewaesser, Jahr, gbPraedikat, gbNote, Probestellen, AnzahlProben, Strecke, Ordnung1)
	values ('OWK-ID', 'OWK-Name', 'Gewässer', 'Jahr', 'ökol. Zustand', 'Note', 'Probestellen', 'Probenanzahl', 'befischte Strecke (m)', 1)
--
select @modus = zvkxListe1 from zv_kontextX where zvkxBenutzer = @nID and lower(zvkxTyp) = lower('doc_bewertung::GBModus')

-- statische Inhalte laden:
select @sql = '
insert into ##t (
	wkNummer, wkBezeichnung, gGewaesser,
	gbDatum,
	Jahr,
	gbPraedikat
	, gbNote
	, color, wkID, checked, Ordnung1)
select 
	''DESN_'' + wkNummer, wkBezeichnung, gGewaesser, '
+ case when (@modus = 'gespeichert') then 'convert(varchar(10), gbDatum, 104)' else 'gbVonBis' end + '
	, cast(datepart(yy, gbDatum) as varchar(4))
	, kDaten
	, replace( cast(round(cast(gbNote as decimal(5, 3)), 2) as decimal(4, 2)), ''.'', '','')
	, kFarbe, wkID, ''T'', 2
from wasserkoerper join gebiets_kz on wkGebietsKz = gID join ' + case when (@modus = 'gespeichert') then 'gesamtbewertung' else 'vGesamtbewertung' end + ' on gbWasserkoerper = wkID left outer join katalog on gbPraedikat = kID
'
-- where-Klausel aus dem Kontext holen:
select @where = zvkxListe1 from zv_kontextX where zvkxBenutzer = @nID and lower(zvkxTyp) = lower('doc_bewertung')
select @where = replace(@where, '~', '')
select @sql = @sql + ' where ' + @where

exec (@sql)
--
--update ##t set AnzahlProben = (select count(ps2bID) from ps2b join bewertung on ps2bBewertung = bID where bGesamtbewertung = gbID) where Ordnung1 > 1
update ##t set AnzahlProben = (
	select count(ps2bID) 
	from ps2b join bewertung on ps2bBewertung = bID join abschnitt on bAbschnitt = aID 
	where aWasserkoerper = wkID and DATEPART(yy, bDatum) = DATEPART(yy, left(gbDatum, 10))
	) where Ordnung1 > 1

--update ##t set Strecke = (select ltrim(str(sum(psGwStrecke_eff))) from probestelle join ps2b on psID = ps2bProbestelle join bewertung on ps2bBewertung = bID where bGesamtbewertung = gbID) where Ordnung1 > 1
update ##t set Strecke = (
	select ltrim(str(sum(psGwStrecke_eff))) 
	from probestelle join ps2b on psID = ps2bProbestelle join bewertung on ps2bBewertung = bID join abschnitt on bAbschnitt = aID
	where aWasserkoerper = wkID and DATEPART(yy, bDatum) = DATEPART(yy, left(gbDatum, 10))
	) where Ordnung1 > 1

update ##t set Probestellen = dbo.f_Probestellen4wkUndJahr(wkID, datepart(yy, left(gbDatum, 10)), char(13)) where Ordnung1 > 1
--
select * from ##t order by Ordnung1, gGewaesser, wkBezeichnung, convert(datetime, left(gbDatum, 10), 104)
--
drop table ##t
--


GO
GRANT EXECUTE ON [dbo].[lst_bewertungC] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[lst_bewertungC] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[lst_fangprot]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[lst_fangprot] (@fpID int = null)
AS
BEGIN
	SET NOCOUNT ON;

CREATE TABLE #fp(
	[fpID] [int] NOT NULL,
	[fpProbestelle] [int] NOT NULL,
	[fpFischart] [int] NOT NULL,
	[fpAnz_1_4] [int] NULL,
	[fpAnz_5_9] [int] NULL,
	[fpAnz_10_14] [int] NULL,
	[fpAnz_15_19] [int] NULL,
	[fpAnz_20_24] [int] NULL,
	[fpAnz_25_29] [int] NULL,
	[fpAnz_30_39] [int] NULL,
	[fpAnz_40_49] [int] NULL,
	[fpAnz_50_59] [int] NULL,
	[fpAnz_60_69] [int] NULL,
	[fpAnz_70_n] [int] NULL,
	[fpAnz_ges] [int] NULL,
	[fpAnz_ha] [float] NULL,
	[fpAnz_100m] [float] NULL,
	[fpGewicht_ges] [float] NULL,
	[fpGewicht_ha] [float] NULL,
	[fpGewicht_100m] [float] NULL,
	[UPD_TIME] [datetime] NULL,
	[UPD_USER] [varchar](40) NULL,
	[fpAnz_0_2] [int] NULL,
	[fpImportiert] [char](1) NULL,
	[fpHost] [int] NULL,
	[fpHostID] [int] NULL,
	[fpWeibchen] [int] NULL,
	[fpGewicht_max] [float] NULL,
	[fpGewicht_avg] [float] NULL,
	[fpWeibchenRel] [float] NULL,
	[fpAnz_zusatz] [int] NULL
)
--
insert into #fp select * from dbo.fangprot where fpID = ISNULL(@fpID, fpID)
--
update #fp set fpAnz_0_2 = fpAnz_0_2 + ROUND((isnull(fpAnz_zusatz, 0) * fpAnz_0_2) / fpAnz_ges, 0)
update #fp set fpAnz_1_4 = fpAnz_1_4 + ROUND((isnull(fpAnz_zusatz, 0) * fpAnz_1_4) / fpAnz_ges, 0)
update #fp set fpAnz_5_9 = fpAnz_5_9 + ROUND((isnull(fpAnz_zusatz, 0) * fpAnz_5_9) / fpAnz_ges, 0)
update #fp set fpAnz_10_14 = fpAnz_10_14 + ROUND((isnull(fpAnz_zusatz, 0) * fpAnz_10_14) / fpAnz_ges, 0)
update #fp set fpAnz_15_19 = fpAnz_15_19 + ROUND((isnull(fpAnz_zusatz, 0) * fpAnz_15_19) / fpAnz_ges, 0)
update #fp set fpAnz_20_24 = fpAnz_20_24 + ROUND((isnull(fpAnz_zusatz, 0) * fpAnz_20_24) / fpAnz_ges, 0)
update #fp set fpAnz_25_29 = fpAnz_25_29 + ROUND((isnull(fpAnz_zusatz, 0) * fpAnz_25_29) / fpAnz_ges, 0)
update #fp set fpAnz_30_39 = fpAnz_30_39 + ROUND((isnull(fpAnz_zusatz, 0) * fpAnz_30_39) / fpAnz_ges, 0)
update #fp set fpAnz_40_49 = fpAnz_40_49 + ROUND((isnull(fpAnz_zusatz, 0) * fpAnz_40_49) / fpAnz_ges, 0)
update #fp set fpAnz_50_59 = fpAnz_50_59 + ROUND((isnull(fpAnz_zusatz, 0) * fpAnz_50_59) / fpAnz_ges, 0)
update #fp set fpAnz_60_69 = fpAnz_60_69 + ROUND((isnull(fpAnz_zusatz, 0) * fpAnz_60_69) / fpAnz_ges, 0)
update #fp set fpAnz_70_n = fpAnz_70_n + ROUND((isnull(fpAnz_zusatz, 0) * fpAnz_70_n) / fpAnz_ges, 0)
--
update #fp set fpAnz_ges = fpAnz_ges + isnull(fpAnz_zusatz, 0)
--
select * from #fp
drop table #fp
--
END


GO
GRANT EXECUTE ON [dbo].[lst_fangprot] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[lst_fangprot] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[lst_fiBSDaten]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[lst_fiBSDaten] (@nID int, @bID int) AS
/* history:
  2007-04-05	klopfer: erstellt
  2007-04-10	klopfer: uebernimmt nun @bID statt @wkID
  2007-04-13	klopfer: Anpassung an Db-Aenderung
  2007-04-16	klopfer: Bezeichnungen des wk, der referenz und der ps; Strecke auf Zeile 4, Einzelbreiten nicht mehr
  2007-04-26	klopfer: Versionsnummer geändert
  2008-09-18	klopfer: Bestimmung der juvenilen Mengen unter Beachtung der Fischart-spezifischen Schwellen
  2008-11-03	klopfer: behandelt Nulls bei den Anzahlen im Fangprotokoll
  2009-02-27	klopfer: neue fiBS-Version
  2009-03-09	klopfer: dummy hinzu
  2009-04-09	klopfer: Logische Werte englisch
  2012-07-23	klopfer: HMWB hinzu
  2016-02-09	klopfer: Debug-Info into profiler
  2016-02-12	klopfer: Bestimmung der Referenzwerte: left outer mit Bezug auf @aID (@aID nicht als where-Klausel)
*/

declare @sql varchar(2000)
declare @juvenile varchar(1000)
declare @i int, @ctPS int, @ctRes int
declare @aID int, @wkID int, @Wasserkoerper varchar(255), @Abschnitt varchar(255), @HMWB varchar(10), @Probestellen varchar(255)
declare @psGwBreite_eff float
--
select 
	@wkID = aWasserkoerper
	, @aID = aID
	, @Abschnitt = dbo.f_Abschnitt(aID)
	, @HMWB = case when isnull(aHMWB, 'F') = 'T' then 'TRUE' else 'FALSE' end
	, @Probestellen = dbo.f_Probestellen4bID(bID, null) 
from bewertung join abschnitt on aID = bAbschnitt where bID = @bID
--
select @Wasserkoerper = dbo.f_Wasserkoerper(@wkID)
select @psGwBreite_eff = avg(psGwBreite_eff) from probestelle join ps2b on psID = ps2bProbestelle where ps2bBewertung = @bID
--
create table #ps (_psID int identity, psID int not null, psDatum datetime null, psGwBreite_eff float null, psGwStrecke_eff float null)
--
insert into #ps (psID, psDatum, psGwBreite_eff, psGwStrecke_eff) select psID, psDatum, psGwBreite_eff, psGwStrecke_eff 
from probestelle join ps2b on psID = ps2bProbestelle where ps2bBewertung = @bID
select @ctPS = count(*) from #ps 
--
create table #t (
	_tID int identity,
	tArt varchar(255) not null,
	tReferenz varchar(255) null,
	tP1Ges varchar(10) null, tP1k varchar(10) null,
	tP2Ges varchar(10) null, tP2k varchar(10) null,
	tP3Ges varchar(10) null, tP3k varchar(10) null,
	tP4Ges varchar(10) null, tP4k varchar(10) null,
	tP5Ges varchar(10) null, tP5k varchar(10) null,
	tP6Ges varchar(10) null, tP6k varchar(10) null,
	tBewertung1 varchar(30) null, tBewertung2 varchar(30) null,
	tDummy varchar(10) null,
	rID int null
)
--
-- Kopfzeile:
insert into #t (tArt, tReferenz, tP1Ges, tP1k, tP2Ges, tP2k, tP3Ges, tP3k, tP4Ges, tP4k, tP5Ges, tP5k, tP6Ges, tP6k, tBewertung1, tBewertung2, tDummy) 
values ('Version 8.0.6 / 08.12.2008', 'Referenz', 'ges_P1', '0+_P1', 'ges_P2', '0+_P2', 'ges_P3', '0+_P3', 'ges_P4', '0+_P4', 'ges_P5', '0+_P5', 'ges_P6', '0+_P6', 'Bewertung', 'HMWB', 'Dummy')
--
-- allgemeine Info:
insert into #t (tArt, tReferenz) values ('System/Datum', '2')
insert into #t (tArt, tReferenz, tP1k, tP2k, tP3k, tP4k, tP5k, tP6k, tBewertung2) values ('Gewässer/poolen', @Wasserkoerper, 'FALSE', 'FALSE', 'FALSE', 'FALSE', 'FALSE', 'FALSE', @HMWB)
insert into #t (tArt, tReferenz) values ('Ref/ges_Breite', @Abschnitt)
insert into #t (tArt, tReferenz) values ('Probestelle/Ufer_re', @Probestellen)
insert into #t (tArt, tReferenz) values ('Gew_breite/Ufer_li', convert(varchar, @psGwBreite_eff))
--
select @ctRes = count(*) from #t
--
-- Referenzen:
insert into #t (tArt, tReferenz, rID, tDummy)
select rBezeichnung, isnull(replace( cast(rwBetrag as varchar), '.', ',' ), '0'), rID, ''
from referenz left outer join referenzwert on rID = rwReferenz and rwAbschnitt = @aID
order by rOrdnung
--
select @ctRes = count(*) from #t
--
-- Dummies:
update #t set tDummy = 'TRUE' from [dummy] where dmBewertung = @bID and dmReferenz = #t.rID and dmOn = 'T'
--
-- ps-abhaengige Werte (Breite, Strecke, Fangmengen):
select @i = 0
if (@ctPS > 6) select @ctPS = 6
while (@i < @ctPS) begin
  select @i = @i + 1
  -- Datum der Probenahme:
  select @sql = 'update #t set tP' + ltrim(str(@i)) + 'k = (select convert(varchar, psDatum, 104) from #ps where _psID = ' + str(@i) + ') where _tID = 2'
  exec (@sql)
  -- Existenz der Probenahme:
  select @sql = 'update #t set tP' + ltrim(str(@i)) + 'k = ''TRUE'' where _tID = 3'
  exec (@sql)
  -- Fangmengen:
  -- alle:
  select @sql = 'update #t set tP' + ltrim(str(@i)) + 'Ges = (select replace( convert(varchar, sum(fpAnz_ges)), ''.'', '','') from fangprot join fischart on fpFischart = fID and fReferenz = #t.rID join #ps on psID = fpProbestelle and _psID = ' + str(@i) + ') where rID is not null'
  exec (@sql)
  -- Juvenile:
  select @juvenile = ' isnull(fpAnz_0_2, 0) + case when isnull(fAdultAb_cm, 2) > 2 then isnull(fpAnz_1_4, 0) else 0 end + case when isnull(fAdultAb_cm, 2) > 5 then isnull(fpAnz_5_9, 0) else 0 end + case when isnull(fAdultAb_cm, 2) > 10 then isnull(fpAnz_10_14, 0) else 0 end '
  select @juvenile = @juvenile + ' + case when isnull(fAdultAb_cm, 2) > 15 then isnull(fpAnz_15_19, 0) else 0 end + case when isnull(fAdultAb_cm, 2) > 20 then isnull(fpAnz_20_24, 0) else 0 end '
  select @sql = 'update #t set tP' + ltrim(str(@i)) + 'k = (select replace( convert(varchar,  sum( ' + @juvenile + ')), ''.'', '','') from fangprot join fischart on fpFischart = fID and fReferenz = #t.rID join #ps on psID = fpProbestelle and _psID = ' + str(@i) + ') where rID is not null'
  exec (@sql)
  -- Strecken:
  select @sql = 'update #t set tP' + ltrim(str(@i)) + 'Ges = (select replace( convert(varchar, psGwStrecke_eff), ''.'', '','') from #ps where _psID = ' + str(@i) + ') where _tID = 4'
  exec (@sql)
end

select
  tArt,
  tReferenz,
  tP1Ges, tP1k,
  tP2Ges, tP2k,
  tP3Ges, tP3k,
  tP4Ges, tP4k,
  tP5Ges, tP5k,
  tP6Ges, tP6k,
  tBewertung1, tBewertung2,
  tDummy
from #t order by _tID
--
drop table #t
drop table #ps


GO
GRANT EXECUTE ON [dbo].[lst_fiBSDaten] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[lst_fiBSDaten] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[lst_fp4r]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[lst_fp4r] (@nID int, @wkID int) AS
/* 
  history:
  2006-10-07	klopfer: nun mit einzelauswahl der ps
*/

create table #t (
	rOrdnung int,
	rBezeichnung varchar(80),
	Anzahl int null,
	Anzahl0Plus int null,
	AnzahlSonstige int null
)

insert into #t  (rOrdnung, rBezeichnung) select rOrdnung, rBezeichnung from referenz

update #t set Anzahl = (
  select sum(fpAnz_ges) 
  from fangprot
  join fischart on fpFischart = fID join referenz on fReferenz = rID
  join probestelle on psID = fpProbestelle and psWasserkoerper = @wkID
--  join zv_kontext zvkB on zvkB.zvkWert = psBetreff and lower(zvkB.zvkTyp) = 'anlaesse' and zvkB.zvkBenutzer = @nID
  join zv_kontext zvkC on zvkC.zvkWert = psID and lower(zvkC.zvkTyp) = 'checked_ps2wk' and zvkC.zvkBenutzer = @nID
where #t.rOrdnung = referenz.rOrdnung
group by rOrdnung, rBezeichnung)
--
update #t set Anzahl0Plus = (
  select sum(fpAnz_0_2) 
  from fangprot
  join fischart on fpFischart = fID join referenz on fReferenz = rID
  join probestelle on psID = fpProbestelle and psWasserkoerper = @wkID
--  join zv_kontext zvkB on zvkB.zvkWert = psBetreff and lower(zvkB.zvkTyp) = 'anlaesse' and zvkB.zvkBenutzer = @nID
  join zv_kontext zvkC on zvkC.zvkWert = psID and lower(zvkC.zvkTyp) = 'checked_ps2wk' and zvkC.zvkBenutzer = @nID
where #t.rOrdnung = referenz.rOrdnung
group by rOrdnung, rBezeichnung)
--
update #t set Anzahl = 0 where Anzahl is null
update #t set Anzahl0Plus = 0 where Anzahl0Plus is null
update #t set AnzahlSonstige = Anzahl - Anzahl0Plus

select * from #t order by rOrdnung

drop table #t


GO
GRANT EXECUTE ON [dbo].[lst_fp4r] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[lst_fp4r] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[lst_ps2b]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE  PROCEDURE [dbo].[lst_ps2b] (
	@nID int,
	@aID int,
	@bID int,
	@ab varchar(20),
	@nurGewaehlte char(1)
)
AS
/* history:
  2008-09-18	klopfer: erstellt, aus lst_ps2a
  2019-07-01	klopfer: psNummer hinzu
*/
declare @zvkxListe1 varchar(1000)
declare @sql varchar(2000), @sqlGewaehlte varchar(255)
--
select @sqlGewaehlte = ' exists (select 1 from dbo.ps2b where ps2bProbestelle = psID and ps2bBewertung = ' + str(@bID) + ') '
select @zvkxListe1 = zvkxListe1 from zv_kontextX where zvkxBenutzer = @nID and lower(zvkxTyp) = 'anlaesse'
if isnull(@zvkxListe1, '') = '' select @zvkxListe1 = '-1' 
select @sql = '
  SELECT case when ' + @sqlGewaehlte + ' then ''T'' else ''F'' end as checked,   
		 psNummer,
         gGewaesser,   
         psProbestrecke,   
         gemKreis,   
         gemName,   
         convert(varchar(255), (select isnull(erBezeichnung, '''') + '' / '' + IsNull ( erPerson_name, '''') + case when IsNull ( erPerson_vname, '''') <> '''' then '', '' + erPerson_vname else '''' end from einrichtung where erID = psEinrichtung_B)) as Durchfuehrender,
		 psID
    FROM 
	probestelle
	join gemeinde on psGemeinde = gemID
	join gebiets_kz on psGebiets_kz = gID
   WHERE
        psAbschnitt = ' + str(@aID) 
if (@nurGewaehlte = 'T') select @sql = @sql + ' and ' + @sqlGewaehlte else select @sql = @sql + ' and psBetreff in (' + @zvkxListe1 + ') and psDatum >= convert(datetime, ''' + @ab + ''', 120) '
select @sql = @sql + ' ORDER BY psNummer'
--
exec(@sql)
--


GO
GRANT EXECUTE ON [dbo].[lst_ps2b] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[lst_ps2b] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[lst_ps4GIS]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE proc [dbo].[lst_ps4GIS] (
	@nID int	-- Benutzer
	, @source char(10) -- psExport, bExport
	)
/*
	"x-y Exporttabelle für ArcGIS 10.X"
	Informationen zu gewählten Probestellen für GIS-Auswertungen
	- alles wird als Text geliefert (damit Punkte als Dezimaltrenner geliefert werden können)

	Aufrufbeispiel:
	exec dbo.lst_ps4GIS 999, 'psexport'

	2018-10-05f. Klopfer: erstellt
	2018-10-23	Klopfer: Zahlen als Zahlen
	2019-07-02	Klopfer: DESN_ vor wkNummer
	2019-07-08	Klopfer: psNummer
	2019-08-01	Klopfer: alte Nummer hinzu
	*/
as

declare @sqlSelect varchar(max), @sql varchar(max), @IDs varchar(max)

-- gewählte Objekte (Probestellen / Bewertungen) holen:
select @IDs = zvkxListe1 from zv_kontextX where zvkxBenutzer = @nID and lower(zvkxTyp) = lower(@source)

select @sqlSelect = '
	psNummer
	, psProbestellennr
	, cast (psUTM_R as int)
	, cast (psUTM_H as int)
	, gGewaesser
	, gGebiets_kz
	, wkBezeichnung
	, ''DESN_'' + wkNummer as wkNummer
	, ltrim(str(aOrdnung, 10, 0))
	, datepart(year, psDatum)
	, psDatum
	, (select left(kDaten, 30) from katalog where kID = psBetreff)
	, (select erBezeichnung from einrichtung where erID = psEinrichtung_F)
	, psProbestrecke
	, psBefischungsrichtung
	, cast(psGwStrecke_eff as int)
	, cast(psFangquote as int)
	, left(psFanggeraet, 40)
	, cast(psGwBreite as decimal(10, 2))
	, cast(psGwTiefe as decimal(10, 2))
	, cast(psHoehenlage as decimal(10, 1))
	, cast(psWassertemp as decimal(10, 1))
	, (select left(kDaten, 30) from katalog where kID = psWasserstand)
	, (select left(kDaten, 30) from katalog where kID = psOekowert)
	, convert(varchar(10), getdate(), 104) + '' '' + convert(varchar(5), getdate(), 114)
	, ps.UPD_USER
	, psBilddatei	 
'


select @sql = 'select ' 
	+ @sqlSelect 
	+ ' from probestelle ps left outer join gebiets_kz on psGebiets_kz = gID left outer join abschnitt on psAbschnitt = aID left outer join wasserkoerper on aWasserkoerper = wkID ' 

if (lower(@source) = lower('bExport'))
	-- explizite Auswahl von Bewertungen, indirekt die einbezogenen Probestellen: 
	select @sql = @sql + ' join ps2b on psID = ps2bProbestelle '

select @sql = @sql + ' where ' + case when lower(@source) = lower('psExport') then 'psID' else 'ps2bBewertung' end + ' in (' + @IDs + ')'

exec (@sql)

GO
GRANT EXECUTE ON [dbo].[lst_ps4GIS] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[lst_ps4GIS] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[lst_referenzwerte]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

create   proc [dbo].[lst_referenzwerte] as
/* Abfrage aller Referenzwerte für alle OWK/Abschnitte

	2023-10-19	Klopfer: erstellt
	*/
declare @r nvarchar(max)
declare @sql nvarchar(max)

select @r = (select distinct rKuerzel + ', ' from referenz order by 1 for xml path('')) 
select @r = LEFT(@r, len(@r) - 1)

select @sql = '
select gGewaesser as [Gewässer], wkBezeichnung as [OWK_Name], wkNummer as [OWK_ID], aOrdnung as [A_ID], aBezeichnung as [Abschnittsbezeichnung], case when isnull(aHMWB, ''F'') = ''T'' then ''ja'' else '''' end as [HMWB], ' + @r + '
from (
	select gGewaesser, wkBezeichnung, wkNummer, aOrdnung, aBezeichnung, aHMWB, rKuerzel, rwBetrag
	from gebiets_kz join wasserkoerper on gID = wkGebietsKz	join abschnitt on wkID = aWasserkoerper
	join referenzwert on aID = rwAbschnitt join referenz on rwReferenz = rID 
	) as Werte
pivot ( max(Werte.rwBetrag) for Werte.rKuerzel in (' + @r + ')) as lstWerte
order by gGewaesser, wkBezeichnung, aOrdnung
'
exec (@sql)
GO
GRANT EXECUTE ON [dbo].[lst_referenzwerte] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[lst_referenzwerte] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[msel_k2ps]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[msel_k2ps] (@psID int, @kontext varchar(80)) AS
select
	kID,

	kDaten
From katalog, k2ps_msel
Where kID = k2ps_mselKatalog And k2ps_mselProbestelle = @psID

And kKatalogart = @kontext

Order by kOrdnung


GO
GRANT EXECUTE ON [dbo].[msel_k2ps] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[msel_k2ps] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[msel_k4ps]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[msel_k4ps] (@psID int, @kontext varchar(80)) AS

select
	kID,
	kDaten
From 	katalog
where 	Not Exists(Select * From k2ps_msel
		Where k2ps_mselKatalog = kID
		And k2ps_mselProbestelle = @psID)
	And kKatalogart = @kontext
		
order by kOrdnung


GO
GRANT EXECUTE ON [dbo].[msel_k4ps] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[msel_k4ps] TO public AS [dbo]
GO
/****** Object:  StoredProcedure [dbo].[zv_saveWertliste2Kontext]    Script Date: 28.03.2024 16:19:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[zv_saveWertliste2Kontext] (@nID int, @typ varchar(255), @liste varchar(max)) AS
/* parst eine liste komma-getrennter zvkWerte und speichert sie einzeln in den nutzerkontext
	2018-10-06	Klopfer: erstellt
*/

declare @lb_stop int 
declare @ls_zvkWert varchar(255)
declare @ll_a int, @ll_e int, @ll_zvkWert int

-- bisherigen Kontext loeschen:
delete from zv_kontext where zvkBenutzer = @nID and lower(zvkTyp) = lower(@typ)

if (isnull(@liste, '') = '') return

-- liste parsen und jeweils den kontext speichern:
select @ll_a = 1
select @lb_stop = 0
while (@lb_stop <> 1) begin
	-- neuen wert extrahieren:
	select @ll_e = charindex(',', @liste, @ll_a)
	if (@ll_e = 0) begin 
		select @ll_e = len(@liste) + 1
		select @lb_stop = 1
	end
	select @ls_zvkWert = substring(@liste, @ll_a, @ll_e - @ll_a) 
	if (@lb_stop <> 1) select @ll_a = @ll_e + 1
	select @ll_zvkWert = convert(int, @ls_zvkWert)
	
	-- in den kontext speichern:
	insert into zv_kontext (zvkBenutzer, zvkTyp, zvkWert) values (@nID, @typ, @ll_zvkWert)
end

GO
GRANT EXECUTE ON [dbo].[zv_saveWertliste2Kontext] TO public AS [dbo]
GO
GRANT EXECUTE ON [dbo].[zv_saveWertliste2Kontext] TO public AS [dbo]
GO
