konto usunięte

Temat: Potrzebna pomoc

Mam takie zapytanie

Select * FROM
(Select ActualWorkBillable ,DATEPART(WW,TimeByDay)AS WeekOfYear,TimeByDay_DayOfMonth ,ResourceName FROM( MSP_TimesheetActual INNER JOIN
MSP_TimesheetResource ON MSP_TimesheetActual.LastChangedResourceNameUID = MSP_TimesheetResource.ResourceNameUID))AS GODZINY
GROUP BY WeekOfYear


Niestety otrzymuje komunikat : Column 'GODZINY.ActualWorkBillable' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Jakies podpowiedzi?

konto usunięte

Temat: Potrzebna pomoc

Jak grupujesz po jakiejs kolumnie, to na wszystkich pozostalych powinnas miec funkcje agregujaca - MAX, MIN, AVG itp.
Przemysław Stróżyński

Przemysław Stróżyński Global Delivery
Service Manager |
Project Manager,
PMP, I...

Temat: Potrzebna pomoc

Jeżeli ma być grupowanie wówczas nie używaj gwiazdki tylko nazw kolumn + użyj na jakiejś kolumnie funkcji agregującej.

Swoją drogą zapytanie jest moim zdaniem troszkę dziwne jeżeli grupowanie nie jest potrzebne to wystarczy:

select * from JOIN daje to samo co sam JOIN. Więc Twoje zapytanie jeżeli usunąć grupowanie jest równoważne:

Select ActualWorkBillable ,DATEPART(WW,TimeByDay)AS WeekOfYear,TimeByDay_DayOfMonth ,ResourceName FROM( MSP_TimesheetActual INNER JOIN
MSP_TimesheetResource ON MSP_TimesheetActual.LastChangedResourceNameUID = MSP_TimesheetResource.ResourceNameUID));

A jeżeli ma być grupowanie to po czym (kolumna i funkcja agregująca).

konto usunięte

Temat: Potrzebna pomoc

OK. Rzeczywiście w lakonicznie wprowadziłam w temat. Otóż mamy tabele ActualWorkBillable - odpowiada za ilosc godzin na dany task ktora wprowadzil uzytkownik do time sheet'a

TimeByDay_DayOfMonth - mowi nam o tym ktory to byl dzien miesiaca kiedy te godziny zostaly wprowadzone

DATEPART(WW,TimeByDay)AS WeekOfYear - wyznacza nam tydzien w jakim zostaly wprowadzone godziny na task

ResourceName - nazwa uzytkownika ktory wprowadzil godziny.

Zapytanie :
Select ActualWorkBillable ,DATEPART(WW,TimeByDay)AS WeekOfYear,TimeByDay_DayOfMonth ,ResourceName FROM( MSP_TimesheetActual INNER JOIN
MSP_TimesheetResource ON MSP_TimesheetActual.LastChangedResourceNameUID = MSP_TimesheetResource.ResourceNameUID));

Wyrzuci nam wszystkie godziny wprowadzone na rozne taski , w jakim tyg zostaly wprowadzone itd. np.

AWB WeekOfYear TimeByDay... ResourceName
2 29 26 EK
3 30 29 EK

8 29 24 PM

Teraz: Chcę pogrupować te godziny tak aby uzyskac kolejnosc wierszy wedlug tyg dla danego uzytkownika np.

2 29 26 EK
3 29 27 EK
9 30 31 Ek
....

Nastepnie zsumować ilosc godzin na dany tydzien ,aby otrzymac

Suma Tydzien ResourceName
40 29 EK
45 30 EK ---- O UWAGA NADGODZINY:]

konto usunięte

Temat: Potrzebna pomoc

No to lecimy :)

Przede wszystkim chcesz _zsumowac_ godziny, prawda?

select sum(ActualWorkBillable) from ...

Teraz chcesz to _pogrupowac_ wedlug tygodnia i uzytkownika:

select sum(ActualWorkBillable), ResourceName, WeekOfYear from ...
...
group by ResourceName, WeekOfYear

Na koncu jeszcze mozemy to _posegregowac_ wedlug tygodnia i uzytkownika:

select sum(ActualWorkBillable), ResourceName, WeekOfYear from ...
...
group by ResourceName, WeekOfYear
order by ResourceName, WeekOfYear

Proste, prawda? :)

Następna dyskusja:

Potrzebna pomoc, informacja...




Wyślij zaproszenie do