SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO IF OBJECT_ID('[dbo].[sp_GetUzenofuzetErtekelolap]') IS NOT NULL BEGIN DROP PROCEDURE [dbo].[sp_GetUzenofuzetErtekelolap] END GO -- ============================================= -- Author: -- Create date: <2016. 01. 06.> -- Description: -- ============================================= CREATE PROCEDURE [sp_GetUzenofuzetErtekelolap] @osztalyId int, @TanevId int AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; --Intézmény, tanév SELECT T_INTEZMENYADATOK_OSSZES.C_NEV IntezmenyNeve, T_INTEZMENYADATOK_OSSZES.C_IRANYITOSZAM IntezmenyIranyitoszam, T_INTEZMENYADATOK_OSSZES.C_VAROS IntezmenyVaros, T_INTEZMENYADATOK_OSSZES.C_CIME IntezmenyCime, T_INTEZMENYADATOK_OSSZES.C_TELEFONSZAM TELEFON, T_INTEZMENYADATOK_OSSZES.C_EMAILCIM EMAILCIM, T_INTEZMENYADATOK_OSSZES.C_OMKOD IntezmenyOMKod, T_INTEZMENYADATOK_OSSZES.C_IGAZGATONEVE Intezmenyvezeto, (SELECT C_OSZTALYFONOKID FROM T_OSZTALY_OSSZES WHERE T_OSZTALY_OSSZES.ID = @osztalyId and T_OSZTALY_OSSZES.C_ALTANEVID = @TanevId and T_OSZTALY_OSSZES.TOROLT = 'F') PartnerID, T_TANEV_OSSZES.C_NEV TANEV FROM T_INTEZMENYADATOK_OSSZES inner join T_TANEV_OSSZES on T_TANEV_OSSZES.ID = T_INTEZMENYADATOK_OSSZES.C_TANEVID and T_TANEV_OSSZES.C_INTEZMENYID = T_INTEZMENYADATOK_OSSZES.C_INTEZMENYID and T_TANEV_OSSZES.TOROLT = 'F' WHERE T_INTEZMENYADATOK_OSSZES.TOROLT = 'F' and T_TANEV_OSSZES.ID = @TanevId --Osztály, évfolyam select T_OSZTALYCSOPORT_OSSZES.C_NEV, T_OSZTALYCSOPORT_OSSZES.C_EVFOLYAMTIPUSA, T_FELHASZNALO_OSSZES.C_NYOMTATASINEV Osztalyfonok from T_OSZTALYCSOPORT_OSSZES inner join T_OSZTALY_OSSZES on t_osztalycsoport_OSSZES.id = T_OSZTALY_OSSZES.ID inner join T_FELHASZNALO_OSSZES on t_felhasznalo_OSSZES.id = t_osztaly_OSSZES.c_osztalyfonokid where T_OSZTALYCSOPORT_OSSZES.TOROLT='F' AND T_OSZTALYCSOPORT_OSSZES.ID=@osztalyId and T_OSZTALYCSOPORT_OSSZES.C_TANEVID = @TanevId --Tanuló adatai SELECT DISTINCT T_FELHASZNALO_OSSZES.ID TANULOID, T_FELHASZNALO_OSSZES.C_NYOMTATASINEV TANULONEV, T_FELHASZNALO_OSSZES.C_OKTATASIAZONOSITO OKTATASIAZONOSITO FROM T_FELHASZNALO_OSSZES JOIN (SELECT C_TANULOID, C_OSZTALYCSOPORTID FROM T_TANULOCSOPORT_OSSZES WHERE T_TANULOCSOPORT_OSSZES.TOROLT='F' AND T_TANULOCSOPORT_OSSZES.C_BELEPESDATUM < GETDATE() AND (T_TANULOCSOPORT_OSSZES.C_KILEPESDATUM is null or T_TANULOCSOPORT_OSSZES.C_KILEPESDATUM >= GETDATE())) TANCSOPORT ON TANCSOPORT.C_TANULOID = T_FELHASZNALO_OSSZES.ID WHERE T_FELHASZNALO_OSSZES.TOROLT='F' AND TANCSOPORT.C_OSZTALYCSOPORTID = @osztalyId and T_FELHASZNALO_OSSZES.C_TANEVID = @TanevId ORDER BY T_FELHASZNALO_OSSZES.C_NYOMTATASINEV --Jegyek select * INTO #Jegyek from ( ------------------------- --ÉVKÖZI JEGYEK ------------------------- select distinct --T_TANULOERTEKELES_OSSZES.ID, T_TANULOCSOPORT_OSSZES.C_TANULOID TanuloID, T_TANTARGY_OSSZES.ID Tantargy, T_DICTIONARYITEMBASE_OSSZES.C_VALUE Osztalyzat, cast(MONTH(T_TANULOERTEKELES_OSSZES.C_ERTEKELESDATUM) as nvarchar) Honap from T_TANULOERTEKELES_OSSZES inner join T_TANULOCSOPORT_OSSZES on t_tanuloertekeles_OSSZES.c_tanuloid = t_tanulocsoport_OSSZES.c_tanuloid -- inner join T_OSZTALYZATERTEKELES_OSSZES on T_TANULOERTEKELES_OSSZES.ID = T_OSZTALYZATERTEKELES_OSSZES.ID inner join T_TANTARGY_OSSZES on T_TANULOERTEKELES_OSSZES.C_TANTARGYID = T_TANTARGY_OSSZES.id inner join T_DICTIONARYITEMBASE_OSSZES on T_TANULOERTEKELES_OSSZES.c_osztalyzat = T_DICTIONARYITEMBASE_OSSZES.ID WHERE --T_TANULOERTEKELES.C_ERTEKELESTIPUSA = 1518 AND T_TANULOERTEKELES_OSSZES.TOROLT='F' AND T_TANULOCSOPORT_OSSZES.TOROLT='F' AND T_TANULOCSOPORT_OSSZES.C_BELEPESDATUM < GETDATE() AND (T_TANULOCSOPORT_OSSZES.C_KILEPESDATUM is null or T_TANULOCSOPORT_OSSZES.C_KILEPESDATUM >= GETDATE()) -- AND T_OSZTALYZATERTEKELES_OSSZES.TOROLT='F' AND T_TANTARGY_OSSZES.TOROLT='F' AND MONTH(T_TANULOERTEKELES_OSSZES.C_ERTEKELESDATUM) != 1 AND T_TANULOCSOPORT_OSSZES.C_OSZTALYCSOPORTID = @osztalyId and T_TANULOERTEKELES_OSSZES.C_TANEVID = @TanevId union all ------------------------- --JANUÁRI JEGYEK ------------------------- select distinct -- T_TANULOERTEKELES_OSSZES.ID, T_TANULOCSOPORT_OSSZES.C_TANULOID TanuloID, T_TANTARGY_OSSZES.ID Tantargy, T_DICTIONARYITEMBASE_OSSZES.C_VALUE Osztalyzat, case when (day(t_tanuloertekeles_OSSZES.c_ertekelesdatum) < 15) then '1/I' else '1/II' end Honap from T_TANULOERTEKELES_OSSZES inner join T_TANULOCSOPORT_OSSZES on t_tanuloertekeles_OSSZES.c_tanuloid = t_tanulocsoport_OSSZES.c_tanuloid -- inner join T_OSZTALYZATERTEKELES_OSSZES on T_TANULOERTEKELES_OSSZES.ID = T_OSZTALYZATERTEKELES_OSSZES.ID inner join T_TANTARGY_OSSZES on T_TANULOERTEKELES_OSSZES.C_TANTARGYID = T_TANTARGY_OSSZES.id inner join T_DICTIONARYITEMBASE_OSSZES on T_TANULOERTEKELES_OSSZES.c_osztalyzat = T_DICTIONARYITEMBASE_OSSZES.ID WHERE --T_TANULOERTEKELES.C_ERTEKELESTIPUSA = 1518 AND T_TANULOCSOPORT_OSSZES.TOROLT='F' AND T_TANULOCSOPORT_OSSZES.C_BELEPESDATUM < GETDATE() AND (T_TANULOCSOPORT_OSSZES.C_KILEPESDATUM is null or T_TANULOCSOPORT_OSSZES.C_KILEPESDATUM >= GETDATE()) -- AND T_OSZTALYZATERTEKELES_OSSZES.TOROLT='F' AND T_TANTARGY_OSSZES.TOROLT='F' AND MONTH(T_TANULOERTEKELES_OSSZES.C_ERTEKELESDATUM) = 1 AND T_TANULOCSOPORT_OSSZES.C_OSZTALYCSOPORTID = @osztalyId and T_TANULOERTEKELES_OSSZES.C_TANEVID = @TanevId union all ------------------------- --FÉLÉVI JEGYEK ------------------------- select distinct --T_TANULOERTEKELES_OSSZES.ID, T_TANULOCSOPORT_OSSZES.C_TANULOID TanuloID, T_TANTARGY_OSSZES.ID Tantargy, T_DICTIONARYITEMBASE_OSSZES.C_VALUE Osztalyzat, 'I' Honap from T_TANULOERTEKELES_OSSZES inner join T_TANULOCSOPORT_OSSZES on t_tanuloertekeles_OSSZES.c_tanuloid = t_tanulocsoport_OSSZES.c_tanuloid -- inner join T_OSZTALYZATERTEKELES_OSSZES on T_TANULOERTEKELES_OSSZES.ID = T_OSZTALYZATERTEKELES_OSSZES.ID inner join T_TANTARGY_OSSZES on T_TANULOERTEKELES_OSSZES.C_TANTARGYID = T_TANTARGY_OSSZES.id inner join T_DICTIONARYITEMBASE_OSSZES on T_TANULOERTEKELES_OSSZES.c_osztalyzat = T_DICTIONARYITEMBASE_OSSZES.ID WHERE T_TANULOERTEKELES_OSSZES.C_ERTEKELESTIPUSA = 1519 AND T_TANULOCSOPORT_OSSZES.C_OSZTALYCSOPORTID = @osztalyId AND T_TANULOCSOPORT_OSSZES.TOROLT='F' AND T_TANULOCSOPORT_OSSZES.C_BELEPESDATUM < GETDATE() AND (T_TANULOCSOPORT_OSSZES.C_KILEPESDATUM is null or T_TANULOCSOPORT_OSSZES.C_KILEPESDATUM >= GETDATE()) -- AND T_OSZTALYZATERTEKELES_OSSZES.TOROLT='F' AND T_TANTARGY_OSSZES.TOROLT='F' and T_TANULOERTEKELES_OSSZES.C_TANEVID = @TanevId union all ------------------------- --ÉVVÉGI JEGYEK ------------------------- select distinct --T_TANULOERTEKELES_OSSZES.ID, T_TANULOCSOPORT_OSSZES.C_TANULOID TanuloID, T_TANTARGY_OSSZES.ID Tantargy, T_TANULOERTEKELES_OSSZES.C_OSZTALYZAT, 'II' Honap from T_TANULOERTEKELES_OSSZES inner join T_TANULOCSOPORT_OSSZES on t_tanuloertekeles_OSSZES.c_tanuloid = t_tanulocsoport_OSSZES.c_tanuloid -- inner join T_OSZTALYZATERTEKELES_OSSZES on T_TANULOERTEKELES_OSSZES.ID = T_OSZTALYZATERTEKELES_OSSZES.ID inner join T_TANTARGY_OSSZES on T_TANULOERTEKELES_OSSZES.C_TANTARGYID = T_TANTARGY_OSSZES.id inner join T_DICTIONARYITEMBASE_OSSZES on T_TANULOERTEKELES_OSSZES.c_osztalyzat = T_DICTIONARYITEMBASE_OSSZES.ID WHERE T_TANULOERTEKELES_OSSZES.C_ERTEKELESTIPUSA = 1520 AND MONTH(T_TANULOERTEKELES_OSSZES.C_ERTEKELESDATUM) != 1 AND T_TANULOCSOPORT_OSSZES.C_OSZTALYCSOPORTID = @osztalyId AND T_TANULOCSOPORT_OSSZES.TOROLT='F' AND T_TANULOCSOPORT_OSSZES.C_BELEPESDATUM < GETDATE() AND (T_TANULOCSOPORT_OSSZES.C_KILEPESDATUM is null or T_TANULOCSOPORT_OSSZES.C_KILEPESDATUM >= GETDATE()) -- AND T_OSZTALYZATERTEKELES_OSSZES.TOROLT='F' AND T_TANTARGY_OSSZES.TOROLT='F' and T_TANULOERTEKELES_OSSZES.C_TANEVID = @TanevId ) tabla ALTER TABLE #Jegyek ADD ID INT IDENTITY(1,1) DECLARE @ID INT = 0 DECLARE @TanuloID INT DECLARE @Tantargy INT DECLARE @Osztalyzat INT DECLARE @Honap VARCHAR(5) CREATE TABLE #Temp (TanuloID int, Tantargy INT, Osztalyzat VARCHAR(30), Honap Varchar(5)) WHILE (1 = 1) BEGIN SELECT TOP 1 @ID = Jegyek.ID, @TanuloID = Jegyek.TanuloID, @Tantargy = Jegyek.Tantargy, @Osztalyzat = Jegyek.Osztalyzat, @Honap=Jegyek.Honap FROM #Jegyek Jegyek WHERE ID > @ID ORDER BY ID IF @@ROWCOUNT = 0 BEGIN BREAK; END --PRINT @ID IF ((SELECT COUNT(*) FROM #Temp Temp WHERE Temp.TanuloID=@TanuloID AND Temp.Tantargy = @Tantargy AND Temp.Honap = @Honap)=0) BEGIN --PRINT 'INSERT' INSERT INTO #Temp (TanuloID, Tantargy, Osztalyzat, Honap) VALUES (@TanuloID, @Tantargy, CAST(@Osztalyzat as varchar), @Honap) END ELSE BEGIN --PRINT 'UPDATE' UPDATE #Temp SET #Temp.Osztalyzat = CAST(#Temp.Osztalyzat as varchar) + ', '+CAST(@Osztalyzat as varchar) WHERE #Temp.TanuloID=@TanuloID AND #Temp.Tantargy = @Tantargy AND #Temp.Honap = @Honap END END SELECT * FROM ( select TanuloID, C_NEV, Honap,Osztalyzat from #Temp Temp inner join T_TANTARGY_OSSZES ON Temp.Tantargy = T_TANTARGY_OSSZES.ID ) TempWithNAMES pivot (MAX(Osztalyzat) FOR Honap IN ([1/I], [1/II],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12], [I], [II])) PivotTable DROP TABLE #Jegyek DROP TABLE #Temp END GO