2016-05-19 7 views
4

Ich habe einen Platten wie folgt aussehenMachen einzelnen Datensatz mehrere Datensätze in der SQL Server

enter image description here

Von zwei Reihen, ich will ShiftPattern Werte teilen und mehrere Datensätze erstellen und StartWeek werden nacheinander erzeugt werden.

Schluss Abfrage:

  1. Split ShiftPattern Spalte und Erstellen mehrerer Datensätze
  2. Zunahme StartWeek wie 20, 21 auf eine Drehung.

Ausgabeergebnis

enter image description here

+0

Wie viele Schichtmuster gibt es? Ist diese Zahl konsistent? – LoztInSpace

+0

und sind sie feste Länge? – LoztInSpace

+0

Wenn das Shift-Muster 1006 ist, dann die Rotation 20 und für die Rotation 1008 21. Gehe ich richtig? –

Antwort

2

Dies ist, was Sie brauchen. Getestet in der Geige.

SQLFiddle Demo

select q.locationid,q.employeeid, 
case 
when (lag(employeeid,1,null) over (partition by employeeid order by weekshiftpatternid)) is null 
then startweek 
else startweek + 1 
end as rotation , 
q.weekshiftpatternid, 
q.shiftyear 
from 
(
select locationid,employeeid, left(d, charindex(',', d + ',')-1) as weekshiftpatternid , 
startweek,shiftyear 
from (
    select *, substring(shiftpattern, number, 200) as d from MyTable locationid left join 
     (select distinct number from master.dbo.spt_values where number between 1 and 200) col2 
     on substring(',' + shiftpattern, number, 1) = ',' 
    ) t 
) q 

Ausgabe

+------------+------------+----------+--------------------+-----------+ 
| locationid | employeeid | rotation | weekshiftpatternid | shiftyear | 
+------------+------------+----------+--------------------+-----------+ 
|   1 | 10000064 |  20 |    1006 |  2016 | 
|   1 | 10000064 |  21 |    1008 |  2016 | 
|   1 | 10000065 |  20 |    1006 |  2016 | 
|   1 | 10000065 |  21 |    1008 |  2016 | 
+------------+------------+----------+--------------------+-----------+ 
+0

großartig. Nach der vollständigen Kontrolle markiere ich Ihre Antwort. – Shohel

1

Ähnliche: In meiner Testtabelle meiner ID ist Ihre EmployeeID oder aber wollen Sie es arbeiten.

SELECT 
*, 
LEFT(shiftBits, CHARINDEX(',', shiftBits + ',')-1) newShiftPattern, 
StartWeek+ROW_NUMBER() OVER(PARTITION BY ID ORDER BY shiftBits) as newStartWeek 
FROM 
(
SELECT 
SUBSTRING(shiftPattern, number, LEN(shiftPattern)) AS shiftBits, 
test2.* 
FROM 
test2,master.dbo.spt_values 
WHERE 
TYPE='P' AND number<LEN(shiftPattern) 
AND SUBSTRING(',' + shiftPattern, number, 1) = ',' 
) AS x 
Verwandte Themen