Как перебирать данные из инструкции select с помощью цикла while и помещать их во временную таблицу
Привет,
я не такой уж профессионал в SQL, я застрял в одной точке и не могу найти выход из этой ситуации. я пытаюсь получить данные для одного отчета. я создал запрос для своей хранимой процедуры, который выглядит следующим образом .
SELECT dbo.tblWorkHistory.WeekEndingDate,dbo.tblWorkHistory.WorkerID, dbo.tblTitles.Title + ' ' + dbo.tblWorkers.Forename + ' ' + dbo.tblWorkers.Surname AS WorkerName, dbo.tblClients.ClientName,dbo.tblWorkHistory.WorkDate, dbo.tblJobCategories.JobCategory,dbo.tblRateTypes.RateType, dbo.tblWorkHistoryRates.Hours,dbo.tblWorkHistoryRates.ChargeRate, dbo.tblClients.ClientID,dbo.tblBookings.CostCentreID,dbo.tblSites.SiteID,dbo.tblSiteRateContracts.JobCategoryID, dbo.tblWorkHistory.BranchID,dbo.tblSystemBranches.BranchLocation,dbo.tblWorkHistoryRates.RateTypeID,dbo.tblCostCentres.CostCentre, dbo.tblSystemBranches.OwnerID, tblWorkHistory.StartTime, tblWorkHistory.FinishTime, tblWorkHistory.BreakHours, tblWorkHistoryRates.Hours * tblWorkHistoryRates.ChargeRate AS Charge FROM dbo.tblWorkHistory LEFT OUTER JOIN dbo.tblBookings ON dbo.tblWorkHistory.BookingID = dbo.tblBookings.BookingID LEFT OUTER JOIN dbo.tblSiteRateContracts ON dbo.tblBookings.SiteRateContractID = dbo.tblSiteRateContracts.SiteRateContractID LEFT OUTER JOIN dbo.tblSites ON dbo.tblSiteRateContracts.SiteID = dbo.tblSites.SiteID LEFT OUTER JOIN dbo.tblClients ON dbo.tblSites.ClientID = dbo.tblClients.ClientID LEFT OUTER JOIN dbo.tblJobCategories ON dbo.tblSiteRateContracts.JobCategoryID = dbo.tblJobCategories.JobCategoryID LEFT OUTER JOIN dbo.tblCostCentres ON dbo.tblBookings.CostCentreID = dbo.tblCostCentres.CostCentreID LEFT OUTER JOIN dbo.tblWorkers ON dbo.tblWorkHistory.WorkerID = dbo.tblWorkers.WorkerID LEFT OUTER JOIN dbo.tblTitles ON dbo.tblWorkers.TitleID = dbo.tblTitles.TitleID LEFT OUTER JOIN dbo.tblSystemBranches ON dbo.tblWorkHistory.BranchID = dbo.tblSystemBranches.BranchID LEFT OUTER JOIN dbo.tblSystemOwner ON dbo.tblSystemBranches.OwnerID = dbo.tblSystemOwner.OwnerID LEFT OUTER JOIN dbo.tblWorkHistoryRates ON dbo.tblWorkHistory.WorkHistoryID = dbo.tblWorkHistoryRates.WorkHistoryID LEFT OUTER JOIN dbo.tblRateTypes ON dbo.tblWorkHistoryRates.RateTypeID = dbo.tblRateTypes.RateTypeID WHERE (dbo.tblWorkHistory.InvoiceID IS NULL) AND (dbo.tblSiteRateContracts.IsDailyRate = 1) AND (dbo.tblWorkHistory.Completed = 1) AND (dbo.tblWorkHistoryRates.Hours IS NOT NULL) AND (dbo.tblClients.BranchID = 9) AND (dbo.tblSystemBranches.OwnerID = 3
но поскольку база данных нормализована, она возвращает несколько строк. например, работник работал на одного клиента в один день, и он выполнял основные и сверхурочные часы. теперь основное и овертайм тарифам и есть 1 для многих отношения между клиентом и значения ratetype, следовательно, я получаю две строки на этого работника, что я хочу, является то, что он должен отображать одну строку для работника такой работы истории и в один ряд его вывести в одной колонке и сверхурочное время как другой столбец.
у меня нет большого представления о том, как я могу использовать цикл while внутри хранимой процедуры и перебирать результат этого оператора select? я не хочу использовать курсор так что если вы ребята можете пожалуйста помочь мне здесь будет действительно здорово полный
Что я уже пробовал:
я попробовал использовать pivot, но из-за того, что я хочу отображать столбцы hours, pay rate и charge rate, он не работает должным образом.