Я собираю сложный запрос, чтобы создать своего рода отчет и иметь небольшую проблему. Мне нужно, чтобы в отчете показывались только учетные записи 9000-9200. Отчет должен отображать каждую учетную запись [Bill Acct], затем иметь итоговые значения для этой учетной записи за каждый час, а затем заканчивать текущую итоговую сумму за день для этой учетной записи. Мой текущий запрос ниже:SQL Query help
Select [Bill Acct],
(select [Total Fee] from Trans where DATEPART(hh, [Time Out]) = 0 ANd Cast([Date Out] as date) = Cast(getdate() as date)) as [0000],
(select [Total Fee] from Trans where DATEPART(hh, [Time Out]) = 1 ANd Cast([Date Out] as date) = Cast(getdate() as date)) as [0100],
(select Sum([Total Fee]) from Trans where DATEPART(hh, [Time Out]) = 2 ANd Cast([Date Out] as date) = Cast(getdate() as date)) as [0200],
(select Sum([Total Fee]) from Trans where DATEPART(hh, [Time Out]) = 3 ANd Cast([Date Out] as date) = Cast(getdate() as date)) as [0300],
(select Sum([Total Fee]) from Trans where DATEPART(hh, [Time Out]) = 4 ANd Cast([Date Out] as date) = Cast(getdate() as date)) as [0400],
(select Sum([Total Fee]) from Trans where DATEPART(hh, [Time Out]) = 5 ANd Cast([Date Out] as date) = Cast(getdate() as date)) as [0500],
(select Sum([Total Fee]) from Trans where DATEPART(hh, [Time Out]) = 6 ANd Cast([Date Out] as date) = Cast(getdate() as date)) as [0600],
(select Sum([Total Fee]) from Trans where DATEPART(hh, [Time Out]) = 7 ANd Cast([Date Out] as date) = Cast(getdate() as date)) as [0700],
(select Sum([Total Fee]) from Trans where DATEPART(hh, [Time Out]) = 8 ANd Cast([Date Out] as date) = Cast(getdate() as date)) as [0800],
(select Sum([Total Fee]) from Trans where DATEPART(hh, [Time Out]) = 9 ANd Cast([Date Out] as date) = Cast(getdate() as date)) as [0900],
(select Sum([Total Fee]) from Trans where DATEPART(hh, [Time Out]) = 10 ANd Cast([Date Out] as date) = Cast(getdate() as date)) as [1000],
(select Sum([Total Fee]) from Trans where Cast([Date Out] as date) = Cast(getdate() as date)) as Total
From Trans
Where [Bill Acct] between 9000 and 9200
ANd Cast([Date Out] as date) = Cast(getdate() as date)
And Void = 0
Group By [Bill Acct], [Site Code]
Order by [Site Code]
Итак, где проблема? – Rahul
Используя приведенный выше запрос, я получаю итоговое значение для всех учетных записей за этот час и не могу понять, как получить общее количество для каждой учетной записи за час. – downeysyndrome
По крайней мере, вам не хватает агрегированной функции во втором и третьем столбцах. Я также думаю, что вы хотели бы включить [код сайта] в предложение select - так как вы группируете его. Более фундаментально это очень неэффективный запрос. Почему не группировать DATEPART (hh, [Time Out]), а затем поворачивать результаты, чтобы получить ваши столбцы? Это устранит все эти подзапросы. Вам также понадобится объединить итог, но это того стоит. – Greenspark