kreta/Kreta.DataAccess.Migrations/Scripts/Archive/20170327110702_Init/Stored procedures/sp_OsztalyNaploErtekelesek.mssql.sql
2024-03-13 00:33:46 +01:00

155 lines
6 KiB
Transact-SQL

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [dbo].[sp_OsztalyNaploErtekelesek]
-- Add the parameters for the stored procedure here
@pOsztalyId int,
@pFelevVege Date,
@pFelevi int,
@pEvvegi int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
--IF 1=0 BEGIN
-- SET FMTONLY OFF
-- END
IF OBJECT_ID('tempdb..#TEMPOSZTALYZAT') IS NOT NULL drop table #TEMPOSZTALYZAT
IF OBJECT_ID('tempdb..#TEMPERTEKELESEK') IS NOT NULL drop table #TEMPERTEKELESEK
IF OBJECT_ID('tempdb..#TEMPIDOSZAK') IS NOT NULL drop table #TEMPIDOSZAK
IF OBJECT_ID('tempdb..#tempVaz') IS NOT NULL drop table #tempVaz
SELECT ID, C_VALUE ERTEK INTO #TEMPOSZTALYZAT FROM T_DICTIONARYITEMBASE
WHERE C_TYPE IN ('OSZTALYZATTIPUS','MAGATARTASERTEKELESTIPUS','SZORGALOMERTEKELESTIPUS')
create table #TEMPIDOSZAK
(
IDOSZAK int,
NEV varchar(20),
SORREND int
)INSERT INTO #TEMPIDOSZAK
(IDOSZAK, NEV, SORREND)
VALUES
(9, '09.',1),(10, '10.', 2),(11, '11.', 3),(12, '12.', 4),(1, '01(I).', 5)
,(100, 'félév', 6),(2, '01(II).', 7),(3, '02.', 8),(4, '03.', 9),(5, '04.', 10)
,(6, '05.', 11),(7, '06.', 12),(101, 'év vége', 13)
SELECT * INTO #tempVaz FROM (
select te.TanuloId
,te.TantargyId
,te.TantargyNev
,ti.IDOSZAK
,ti.SORREND
from (Select foglalkozas.C_TANTARGYID TantargyId
,tanulo.C_TANULOID TanuloId
,Tantargy.C_NEV TantargyNev
From(
SELECT [ID]
FROM [T_OSZTALYCSOPORT] where [TOROLT] = 'F' And ID = @pOsztalyId
Union
SELECT [ID]
FROM [T_CSOPORT]
INNER JOIN T_CSOPORTOK_OSZTALYOK ON T_CSOPORT.ID = T_CSOPORTOK_OSZTALYOK.C_CSOPORTOKID
where [TOROLT] ='F' And T_CSOPORTOK_OSZTALYOK.C_OSZTALYOKID = @pOsztalyId) ocs
inner join ( SELECT
[C_TANTARGYID]
,[C_OSZTALYCSOPORTID]
FROM [T_FOGLALKOZAS] where [TOROLT] = 'F') foglalkozas
on foglalkozas.C_OSZTALYCSOPORTID = ocs.ID
inner join (select
ID
,C_NEV
from T_TANTARGY TARGY) Tantargy ON Tantargy.ID = foglalkozas.C_TANTARGYID
cross join (SELECT distinct
[C_TANULOID]
FROM [T_TANULOCSOPORT] where [TOROLT] = 'F'
and [C_BELEPESDATUM] < GETDATE()
and ([C_KILEPESDATUM] is null or [C_KILEPESDATUM] >= GETDATE())
and C_OSZTALYCSOPORTID = @pOsztalyId) tanulo )te
cross join #TEMPIDOSZAK ti
) tempVaz
SELECT TANULO.ID TANULOID,
TANULO.TANULONEV,
TANULO.OKTATASIAZONOSITO,
YEAR(ERTEKELES.C_ERTEKELESDATUM) EV,
CASE WHEN ERTEKELES.C_ERTEKELESTIPUSA = @pFelevi
THEN 100
ELSE CASE WHEN ERTEKELES.C_ERTEKELESTIPUSA = @pEvvegi
THEN 101
ELSE
CASE WHEN ERTEKELES.C_ERTEKELESDATUM > @pFelevVege
THEN MONTH(ERTEKELES.C_ERTEKELESDATUM) + 1
ELSE MONTH(ERTEKELES.C_ERTEKELESDATUM)
END END END as IDOSZAK,
TARGY.C_NEV TARGYNEV,
TARGY.ID TARGYID,
OSZTALYZATTIPUSOK.ERTEK OSZTALYZAT,
MAGATARTAS.ERTEK MAGATARTAS,
SZORGALOM.ERTEK SZORGALOM,
ERTEKELES.C_ERTEKELESTIPUSA ERTEKELESTIPUS
INTO #TEMPERTEKELESEK
FROM T_TANULOERTEKELES ERTEKELES
LEFT JOIN #TEMPOSZTALYZAT OSZTALYZATTIPUSOK ON OSZTALYZATTIPUSOK.ID = ERTEKELES.C_OSZTALYZAT
LEFT JOIN T_OSZTALYFONOKIERTEKELES OSZTALYFONOKI ON OSZTALYFONOKI.ID = ERTEKELES.ID
LEFT JOIN #TEMPOSZTALYZAT MAGATARTAS ON MAGATARTAS.ID = OSZTALYFONOKI.C_MAGATARTAS
LEFT JOIN #TEMPOSZTALYZAT SZORGALOM ON SZORGALOM.ID = OSZTALYFONOKI.C_SZORGALOM
JOIN T_TANTARGY TARGY ON TARGY.ID = ERTEKELES.C_TANTARGYID
JOIN ( SELECT ID, C_NYOMTATASINEV TANULONEV, C_OKTATASIAZONOSITO OKTATASIAZONOSITO FROM T_FELHASZNALO WHERE TOROLT='F') TANULO ON TANULO.ID = ERTEKELES.C_TANULOID
WHERE EXISTS
(
SELECT * FROM T_TANULOCSOPORT WHERE
T_TANULOCSOPORT.C_TANULOID = ERTEKELES.C_TANULOID
AND T_TANULOCSOPORT.C_OSZTALYCSOPORTID = @pOsztalyId
AND T_TANULOCSOPORT.TOROLT='F'
AND T_TANULOCSOPORT.C_BELEPESDATUM < GETDATE()
AND (T_TANULOCSOPORT.C_KILEPESDATUM is null or T_TANULOCSOPORT.C_KILEPESDATUM >= GETDATE())
)
AND ERTEKELES.TOROLT='F'
AND (ERTEKELES.C_OSZTALYZAT IS NOT NULL OR OSZTALYFONOKI.C_MAGATARTAS IS NOT NULL OR OSZTALYFONOKI.C_SZORGALOM IS NOT NULL)
ORDER BY TANULO.TANULONEV, TANULO.OKTATASIAZONOSITO , ERTEKELES.C_TANULOID, YEAR(ERTEKELES.C_ERTEKELESDATUM), MONTH(ERTEKELES.C_ERTEKELESDATUM),TARGY.C_NEV
SELECT distinct
tempIdoszak.TanuloId
,tempIdoszak.TantargyNev
,tempIdoszak.Sorrend as Idoszak
,RESULTS.Osztalyzatok
FROM (select
CASE WHEN t1.Osztalyzat is null
THEN
CASE WHEN t1.Magatartas is not null OR t1.Szorgalom is not null
THEN ISNULL( CAST(Avg(t1.Magatartas) AS varchar(1)),'0')+ '/' + ISNULL( CAST(Avg(t1.Szorgalom) AS varchar(1)),'0')
ELSE null
End
ELSE STUFF(
(SELECT ', ' + CAST(t2.Osztalyzat AS varchar(1))
FROM #TEMPERTEKELESEK t2
where t1.TanuloId = t2.TanuloId And t1.Idoszak = t2.Idoszak And t1.ErtekelesTipus = 1518 And t2.ErtekelesTipus = 1518 And t1.TargyNev = t2.TargyNev
FOR XML PATH (''))
, 1, 1, '')
END AS Osztalyzatok,
t1.Idoszak,
t1.TargyNev,
t1.TARGYID,
t1.TANULOID
from #TEMPERTEKELESEK t1
Group by t1.Idoszak, t1.TargyNev,t1.TARGYID, t1.TANULOID ,t1.ErtekelesTipus, t1.OSZTALYZAT ,t1.MAGATARTAS, t1.SZORGALOM
) RESULTS
right join #tempVaz tempIdoszak
on tempIdoszak.TanuloId = RESULTS.TANULOID And tempIdoszak.IDOSZAK = RESULTS.IDOSZAK And tempIdoszak.TantargyId = RESULTS.TARGYID
order by tempIdoszak.TanuloID, tempIdoszak.TantargyNev , tempIdoszak.Sorrend
IF OBJECT_ID('tempdb..#TEMPOSZTALYZAT') IS NOT NULL drop table #TEMPOSZTALYZAT
IF OBJECT_ID('tempdb..#TEMPERTEKELESEK') IS NOT NULL drop table #TEMPERTEKELESEK
IF OBJECT_ID('tempdb..#TEMPIDOSZAK') IS NOT NULL drop table #TEMPIDOSZAK
IF OBJECT_ID('tempdb..#tempVaz') IS NOT NULL drop table #tempVaz
END