Hallo Community,
Ich habe das folgende Problem.
Es soll eine Historisierung in einer MS SQL Abfrage stattfinden um das Ergebnis in einem Cube abzubilden.
Die Ausgangstabelle nach SubSelect hat folgende Form.
Personal; Datum; Kostenstelle; Abteilung; Status; Abrechngruppe; Kennzahlen; #Value
Mitarbeiter A; 01.2015; 400000;AB;X;A_V;Preis;400
Über das Datum möchte ich nun eine zweite Tabelle Joinen, welche die Form
Personal; VON;BIS;Abteilung besitzt (NUP_Abteilungzeit)
Mitarbeiter A;01.01.2015;28.02.2015;Abteilung1
Mitarbeiter A;01.03.2015;NULL -> Hier benutze ich CASE mit (GETDATE()) um das aktuelle Datum einzutragen (Im Unteren Beispiel nicht inbegriffen); Abteilung2
Was bekomme ich als Ergebnis:
Mitarbeiter A 01.2015 52100 FR Arbeiter U_P I-Kosten 400 Abteilung1
Mitarbeiter A 02.2015 52100 FR Arbeiter U_P I-Kosten 400 NULL -> Hier ist das Problem!!!
Mitarbeiter A 03.2015 52100 FR Arbeiter U_P I-Kosten 400 Abteilung2
Mein eigentlicher Ansatz ist ein Join über einen Kalender der mir Dann pro Monat die Abteilung dahinter schreibt -> Select * from A Left Join Kalender d on d.datum between a.von AND a.bis
- leider bekomm ich das ganze so auch nicht zum laufen, habt ihr evtl eine Idee oder einen anderen Lösungsansatz?
Zusammengefasst: Ich habe ein Datum im Format mm.yyyy und ein VON BIS Datum im Format dd.mm.yyyy
Alle Monate dazwischen sollen ausgegeben werden und die Abteilung dazu stehen.
01.01.2015 bis 31.05.2015 Abteilung X
=> 01.2015 Abteilung x
=> 02.2015 Abteilung x
=> 03.2015 Abteilung x
=> 04.2015 Abteilung x
=> 05.2015 Abteilung x
....
Hoffentlich ein wenig verständlich, vielen Dank
Ich habe das folgende Problem.
Es soll eine Historisierung in einer MS SQL Abfrage stattfinden um das Ergebnis in einem Cube abzubilden.
Die Ausgangstabelle nach SubSelect hat folgende Form.
Personal; Datum; Kostenstelle; Abteilung; Status; Abrechngruppe; Kennzahlen; #Value
Mitarbeiter A; 01.2015; 400000;AB;X;A_V;Preis;400
Über das Datum möchte ich nun eine zweite Tabelle Joinen, welche die Form
Personal; VON;BIS;Abteilung besitzt (NUP_Abteilungzeit)
Mitarbeiter A;01.01.2015;28.02.2015;Abteilung1
Mitarbeiter A;01.03.2015;NULL -> Hier benutze ich CASE mit (GETDATE()) um das aktuelle Datum einzutragen (Im Unteren Beispiel nicht inbegriffen); Abteilung2
Was bekomme ich als Ergebnis:
Mitarbeiter A 01.2015 52100 FR Arbeiter U_P I-Kosten 400 Abteilung1
Mitarbeiter A 02.2015 52100 FR Arbeiter U_P I-Kosten 400 NULL -> Hier ist das Problem!!!
Mitarbeiter A 03.2015 52100 FR Arbeiter U_P I-Kosten 400 Abteilung2
Mein eigentlicher Ansatz ist ein Join über einen Kalender der mir Dann pro Monat die Abteilung dahinter schreibt -> Select * from A Left Join Kalender d on d.datum between a.von AND a.bis
- leider bekomm ich das ganze so auch nicht zum laufen, habt ihr evtl eine Idee oder einen anderen Lösungsansatz?
Zusammengefasst: Ich habe ein Datum im Format mm.yyyy und ein VON BIS Datum im Format dd.mm.yyyy
Alle Monate dazwischen sollen ausgegeben werden und die Abteilung dazu stehen.
01.01.2015 bis 31.05.2015 Abteilung X
=> 01.2015 Abteilung x
=> 02.2015 Abteilung x
=> 03.2015 Abteilung x
=> 04.2015 Abteilung x
=> 05.2015 Abteilung x
....
Hoffentlich ein wenig verständlich, vielen Dank
SQL:
SELECT a.*,b.ABTEILUNG FROM
(
SELECT
CASE WHEN p.Personal IS NULL THEN 'Sonstiges' ELSE p.PERSONAL END AS Personal,
RIGHT('00' + CONVERT(VARCHAR(2),labr.AbrMon),2) + '.' +CONVERT(VARCHAR(4),labr.AbrJahr) as Datum,
p.PZEKOST as 'Kostenstelle',
p.ABTEILUNG as 'Abteilung',
--Logik um Arbeiter/Angestellte/Geringfügig/Azubi/Leiharbeiter zu unterteilen
CASE p.ABRECHNGRUPPE
WHEN 'A_AZUBI' THEN 'Azubi'
WHEN 'U_AZUBI' THEN 'Azubi'
WHEN 'A_GB' THEN 'Gering'
WHEN 'U_GB' THEN 'Gering'
ELSE
CASE p.ABTEILUNG
WHEN 'EK' THEN 'Arbeiter'
WHEN 'EQ' THEN 'Angestellter'
WHEN 'EP' THEN 'Angestellter'
WHEN 'FK' THEN 'Angestellter'
WHEN 'FP' THEN 'Angestellter'
WHEN 'K' THEN 'Angestellter'
WHEN 'GF' THEN 'Angestellter'
WHEN 'QMB' THEN 'Angestellter'
WHEN 'GLA' THEN 'Angestellter'
WHEN 'P' THEN 'Angestellter'
WHEN 'E' THEN 'Angestellter'
WHEN 'F' THEN 'Angestellter'
WHEN 'FP' THEN 'Angestellter'
WHEN 'FK' THEN 'Angestellter'
WHEN 'V' THEN 'Angestellter'
WHEN 'KB' THEN 'Angestellter'
WHEN 'KC' THEN 'Angestellter'
WHEN 'KI' THEN 'Angestellter'
WHEN 'KE' THEN 'Angestellter'
ELSE 'Arbeiter'
END END as 'Status',
p.Abrechngruppe,
'I-Kosten' as 'Kennzahlen',
LAbr.KV_AG + LAbr.RV_AG + LAbr.AV_AG + LAbr.PV_AG + LAbr.U2 + LAbr.IGU + LAbr.BruttoEBVO as #Value
FROM
lohn.dbo.Arbeitnehmer La
left join lohn.dbo.ANMonatswerte_Abrech LAbr on La.ANNr = LAbr.ANNr AND La.MDNr = LAbr.MDnr
left join APplusprod.dbo.PERSONAL p on convert(varchar(4),La.ANNr) = convert(varchar(4),p.LOHNNR)
AND convert(varchar(4),p.LOHNNR) = convert(varchar(4),LAbr.ANNr)
AND convert(varchar(1),LAbr.MDNr) = CASE WHEN p.LOHNMANDANT = 'ALU' THEN 1 ELSE 2 END
AND convert(varchar(1),La.MDNr) = CASE WHEN p.LOHNMANDANT = 'ALU' THEN 1 ELSE 2 END
WHERE LAbr.AbrJahr = '2015' AND LAbr.MDNr IN ('1','2') AND p.ABTEILUNG NOT IN ('ALTR','UFT') AND KoNr != '2'
) as A LEFT join APplusProd.dbo.Nup_Abteilungzeit b on a.Personal = b.Personal AND a.Datum >= SUBSTRING(convert(varchar(10),b.VON,104),4,7) AND a.Datum <= SUBSTRING(convert(varchar(10),b.VON,104),4,7)
group by
a.Datum,
a.Personal,
A.Kostenstelle,
A.ABRECHNGRUPPE,
A.ABTEILUNG,
A.Status,
A.Kennzahlen,
b.ABTEILUNG,
A.#Value
order by Personal