На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Akina
  
> Не могу перевести процедуру из MSSQL в MySql , Не могу перевести процедуру из MSSQL в MySql
    Здравствуйте! Столкнулся с проблемой нужно перевести процедуру из MSSQL в MySql
    ExpandedWrap disabled
      /****** Объект:  StoredProcedure [dbo].[GetMonthSubjectClassesMarks]    Дата сценария: 09/01/2009 22:27:02 ******/
      SET ANSI_NULLS ON
      GO
      SET QUOTED_IDENTIFIER ON
      GO
      IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetMonthSubjectClassesMarks]') AND type in (N'P', N'PC'))
      BEGIN
      EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[GetMonthSubjectClassesMarks]
      (
          @className NVARCHAR(50),
          @subjectName NVARCHAR(50),
          @month Integer,
          @year Integer
      )
       
      AS
      DECLARE @MAIN_QUERY nvarchar(4000)
      Set @MAIN_QUERY=''[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],
                [11],[12],[13],[14],[15],[16],[17],[18],[19],[20],
                [21],[22],[23],[24],[25],[26],[27],[28],[29],[30],[31]
      from(
      SELECT peopleName=(
                          SELECT [name] FROM Peoples where [id]=people_ID),
                          [1],[2],[3],[4],[5],[6],[7],[8],[9],[10],
                          [11],[12],[13],[14],[15],[16],[17],[18],[19],[20],
                          [21],[22],[23],[24],[25],[26],[27],[28],[29],[30],[31]
              FROM
              (
                  SELECT date_today,people_ID,mark=case when mark is null then CHAR(32) else cast(mark as varchar) end
                  FROM(
                          SELECT 6*(we-1) + md AS date_today
                          FROM
                              (
                                  SELECT 1 we UNION ALL SELECT 2 UNION ALL SELECT 3
                                  UNION ALL SELECT 4 UNION ALL SELECT 5 union all select 6
                              )
                          temp1 CROSS JOIN
                              (
                                  SELECT 1 md UNION ALL SELECT 2 UNION ALL SELECT 3
                                  UNION ALL SELECT 4 UNION ALL SELECT 5 union all select 6
                              )  
                          temp2 WHERE 6*(we-1) + md <= 31)TempTab1 CROSS JOIN
                              (
                              SELECT peoples.[id] as people_ID from Peoples
                              INNER JOIN Classes
                              ON Peoples.[classID]=Classes.[id]
                              AND Classes.[name]=''''''+cast(@className as varchar)+'''''')TempTab2
                          LEFT JOIN
                              (
                                  SELECT * from Marks inner join Subjects on Marks.subjectID=Subjects.[id]
                                  WHERE Subjects.[name]=''''''+cast(@subjectName as varchar)+'''''')TempTab3
                       ON TempTab3.[peopleID]=TempTab2.people_ID and month([DateMark])=''+cast(@month as varchar)+'' and
                      year([DateMark])=''+cast(@year as varchar)+'' and day([dateMark])=TempTab1.date_today)
              P PIVOT
              (
              max(mark)
              FOR date_today IN
              ( [1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],
                [18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28],[29],[30],[31] )
              ) AS pvt)Q
              order by peopleName''
       
      EXEC(''SELECT peopleName as [''+@subjectName+''], ''+@MAIN_QUERY)
       
      '
      END

    Сам запрос:
    ExpandedWrap disabled
      Set @MAIN_QUERY=''[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],
                [11],[12],[13],[14],[15],[16],[17],[18],[19],[20],
                [21],[22],[23],[24],[25],[26],[27],[28],[29],[30],[31]
      from(
      SELECT peopleName=(
                          SELECT [name] FROM Peoples where [id]=people_ID),
                          [1],[2],[3],[4],[5],[6],[7],[8],[9],[10],
                          [11],[12],[13],[14],[15],[16],[17],[18],[19],[20],
                          [21],[22],[23],[24],[25],[26],[27],[28],[29],[30],[31]
              FROM
              (
                  SELECT date_today,people_ID,mark=case when mark is null then CHAR(32) else cast(mark as varchar) end
                  FROM(
                          SELECT 6*(we-1) + md AS date_today
                          FROM
                              (
                                  SELECT 1 we UNION ALL SELECT 2 UNION ALL SELECT 3
                                  UNION ALL SELECT 4 UNION ALL SELECT 5 union all select 6
                              )
                          temp1 CROSS JOIN
                              (
                                  SELECT 1 md UNION ALL SELECT 2 UNION ALL SELECT 3
                                  UNION ALL SELECT 4 UNION ALL SELECT 5 union all select 6
                              )  
                          temp2 WHERE 6*(we-1) + md <= 31)TempTab1 CROSS JOIN
                              (
                              SELECT peoples.[id] as people_ID from Peoples
                              INNER JOIN Classes
                              ON Peoples.[classID]=Classes.[id]
                              AND Classes.[name]=''''''+cast(@className as varchar)+'''''')TempTab2
                          LEFT JOIN
                              (
                                  SELECT * from Marks inner join Subjects on Marks.subjectID=Subjects.[id]
                                  WHERE Subjects.[name]=''''''+cast(@subjectName as varchar)+'''''')TempTab3
                       ON TempTab3.[peopleID]=TempTab2.people_ID and month([DateMark])=''+cast(@month as varchar)+'' and
                      year([DateMark])=''+cast(@year as varchar)+'' and day([dateMark])=TempTab1.date_today)
              P PIVOT
              (
              max(mark)
              FOR date_today IN
              ( [1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],
                [18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28],[29],[30],[31] )
              ) AS pvt)Q
              order by peopleName''
       
      EXEC(''SELECT peopleName as [''+@subjectName+''], ''+@MAIN_QUERY)
       
      '


    Добавлено
    Отображает страницу школьного журнала.
      MySql не знает слова PIVOT
      Так что лучше не переводить в него такие вещи
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,1257 ]   [ 15 queries used ]   [ Generated: 25.04.24, 11:16 GMT ]