Agnieszka Janiak

Agnieszka Janiak Analityk Systemów
Biznesowych

Temat: SQL - pomoc w napisaniu zapytania

Witam szanownych kolegów. Czy jako bardzo początkujący użytkownik SQL mogę poprosić o pomoc, bo już nie mogę nic więcej wykombinować a muszę coś zrobić:

Mam tabelę
CREATE TABLE dbo.DW_Absencje (
AbsencjaID int NOT NULL,
PracownikID int NOT NULL,
DataOd date NOT NULL,
DataDo date NOT NULL,
PowodAbsencjiID int NOT NULL,
LiczbaDniKalendarz int,
LiczbaDniRob int,
Wiek int,
IloscDzieciDo14lat int,
PRIMARY KEY NONCLUSTERED (AbsencjaID),
FOREIGN KEY (PracownikID) REFERENCES dbo.DW_Pracownicy (PracownikID),
FOREIGN KEY (PowodAbsencjiID) REFERENCES dbo.DW_Z_PowodAbsencji (PowodAbsencjiID))

oraz tabelę

CREATE TABLE dbo.DW_Z_PowodAbsencji (
PowodAbsencjiID int NOT NULL,
PowodAbsencji varchar(30) NOT NULL,
CzyKosztPracodawcy int NOT NULL,
CzyDniRobocze int NOT NULL,
PRIMARY KEY NONCLUSTERED (PowodAbsencjiID))

Podczas wpisywania danych do tabeli DW_Absencje potrzebuję wyliczyć Dni kalendarzowe absencji - ale tylko tych absencji, które w tabeli DW_Z_PowodAbsencji w polu CzyDniRobocze mają wartość 0.
Próbowałam tak:
LiczbaDniKalendarz as DATEDIFF(day, DataOd,DataDo)+1
- działa, ale wtedy wylicza mi dni dla wszystkich absencji. Kombinowanie z warunkami jakoś mi nie wychodzi:

Próba I:
LiczbaDniKalendarz as (case (select CzyDniRobocze from dbo.DW_Z_PowodAbsencji
where dbo.DW_Absencje.PowodAbsencjiID=dbo.DW_Z_PowodAbsencji.PowodAbsencjiID)
when (0) then DATEDIFF(day, DataOd,DataDo)+1 when (1) then 0),

Próba II:
LiczbaDniKalendarz as (if (select P.CzyDniRobocze from DW_Z_PowodAbsencji as P, DW_Absencje as A
where A.PowodAbsencjiID=P.PowodAbsencjiID)=0,
DATEDIFF(day, DataOd,DataDo)+1, 0),

Drugi problem to wyliczenie dni roboczych - dla absencji, które mają być rozliczane wg dni roboczych - tu juz zupełnie brakuje mi pomysłów.

Byłabym bardzo wdzięczna za pomoc

konto usunięte

Temat: SQL - pomoc w napisaniu zapytania

Napisz sobie 2 funckje:

1. Wylicznie dni kalendarzowych
2. Wyliczanie dni roboczych

Ad.1

CREATE FUNCTION udf_DniKalendarzowe(
@PowodAbsencjiID INT
) RETURNS INT
AS
BEGIN
DECLARE @result INT;

SELECT @result=DATEDIFF(day, DataOd, DataDo) FROM DW_Z_PowodAbsencji WHERE PowodAbsencjiID = @PowodAbsencjiID AND CzyDniRobocze = 0

IF @result IS NULL THEN SET @result = 0

RETURN @result
END


Ad.2

Musisz napisac fukcje ktora bedzie Ci wyliczala ilosc dni roboczych pomiedzy dwoma datami. Proponuje Ci zalozyc tablice DniWolne gdzie bedziesz miala wpisane wszystkie daty w roku ktore sa wolne i potem to juz z gorki.
Agnieszka Janiak

Agnieszka Janiak Analityk Systemów
Biznesowych

Temat: SQL - pomoc w napisaniu zapytania

Działa !

Zabieram się do dalszej pracy

Dziękuję bardzo !

Następna dyskusja:

Pomoc w napisaniu zapytania




Wyślij zaproszenie do