Member 12004926 Ответов: 1

Как мне сгруппировать по в подзапросе с функцией aggrecate


как написать запрос в oracle 11 g с помощью group by в подзапросе

мой вопрос таков

;WITH cte(select

      distinct

          KioskStatus.StatusDate,

          zonedetails.ZoneId,

          zonedetails.ZoneName,

          zonedetails.zonecode,

          branchdetails.branchname,

          branchdetails.branchcode,

          KioskInformations.KioskId,

          KioskInformations.IPAddress,

          KioskStatus.Connected,

          TO_char(KioskStatus.StatusDate ,'DD-MM-YYYY') StartDate,

          TO_char(KioskStatus.StatusDate ,'HH24:mi:SS') StartTime,

           min(KioskStatus.StatusDate) mindate,

             max(KioskStatus.StatusDate) LastStatus,



          (select Count(KioskId) from NothingToPrints where  TO_char(StatusDate,'yyyy-mm-dd')=TO_char(KioskStatus.StatusDate,'yyyy-mm-dd') and   KioskId=KioskStatus.KioskId) TotalTrn,

          (select Count(KioskId) from barcodeerrors where  TO_char(StatusDate,'yyyy-mm-dd')=TO_char(KioskStatus.StatusDate,'yyyy-mm-dd') and   KioskId=KioskStatus.KioskId) TotalTrn1,

          (select Count(KioskId) from NothingToPrints where  TO_char(StatusDate,'yyyy-mm-dd')=TO_char(KioskStatus.StatusDate,'yyyy-mm-dd') and StatusMessage='Printing Success' and  KioskId=KioskStatus.KioskId) SuccessTransaction,

          (select Count(KioskId) from NothingToPrints where  TO_char(StatusDate,'yyyy-mm-dd')=TO_char(KioskStatus.StatusDate,'yyyy-mm-dd') and StatusMessage='Noting to print'  and  KioskId=KioskStatus.KioskId) NotingtoPrint,

          (select Count(KioskId) from NothingToPrints where TO_char(StatusDate,'yyyy-mm-dd')=TO_char(KioskStatus.StatusDate,'yyyy-mm-dd')and  KioskId=KioskStatus.KioskId) /30 AvgTrn



          FROM

              KioskInformations

              LEFT JOIN KioskStatus ON KioskInformations.KioskId = KioskStatus.KioskId

              INNER JOIN ZoneDetails ON KioskInformations.ZoneId = ZoneDetails.ZoneId

              INNER JOIN BranchDetails ON KioskInformations.BranchId = BranchDetails.BranchId AND ZoneDetails.ZoneId = BranchDetails.ZoneId



              group by



                   KioskStatus.StatusDate,

                   zonedetails.ZoneId,

                   zonedetails.ZoneName,

                   zonedetails.zonecode,

                   branchdetails.branchname,

                   branchdetails.branchcode,

                  KioskInformations.KioskId,

                   KioskInformations.IPAddress,

                   KioskStatus.Connected,

                   TO_char(KioskStatus.StatusDate ,'DD-MM-YYYY') ,

                   TO_char(KioskStatus.StatusDate ,'HH24:mi:SS') )


Что я уже пробовал:

добавление aggrecate colum в предложение where

MarcusCole6833

Исходя из того, что было сказано ранее, если вы знаете свои данные, не могли бы вы разбить их на более мелкие части, проходящие между временной таблицей или CTE, и закодировать их шаг за шагом? Причина, по которой я говорю это, заключается в большой группе по (как указано) и массе значений столбцов, полученных с помощью подзапросов.

1 Ответов

Рейтинг:
1

OriginalGriff

Мы не можем помочь вам напрямую на основе такого запроса - мы понятия не имеем, как выглядят ваши данные или что вы ожидаете получить от них; но всякий раз, когда я вижу группу с длинным списком полей, это, вероятно, неправильно. Каждый раз, когда вы добавляете поле в предложение GROUP BY, вы добавляете сверху количество генерируемых строк, а не уменьшаете их. Я думаю, что вы хотите хорошенько подумать о своих данных и о том, что именно вы пытаетесь получить, прежде чем начать писать запрос!

Это может помочь: SQL GROUP By и ошибка "имя столбца недопустимо в списке выбора, потому что..." [^]


Member 12004926

основной вопрос заключается в том, как добавить столбец подзапроса в group by