보고 서비스에 표시 할 하나의 마스터 테이블을 만들어야하지만 데이터 결합 방법에 문제가 있습니다. 특정 날짜에 예약 된 기숙사의 정보를 저장하는 "Reservaciones"라는 테이블이 하나 있습니다. 예를 들면 지금열을 피벗 열
, 미안이 필드에 의해 그룹핑 정보 :
- R.ClaTrab을 WorkerId
- R.ClaUbicacion AS UbicationID
- R.ClaEstancia AS ResidenceID
- R AS .FechaIni AS InitialDay
- R.FechaFin AS LastDay
그 결과는 First result**
입니다. 그림에서 알 수 있듯이 2 열이 중복되어 숫자 4와 숫자 5가 정확합니다.
는 지금까지 내가 결과이 desire result처럼되고 싶어 내 코드
SELECT
R.ClaTrab AS WorkerId,
MAX(E.NomEstancia) AS ResidenceName,
R.ClaUbicacion AS UbicationID,
R.ClaEstancia AS ResidenceID,
DATEDIFF(DAY, R.FechaIni, R.FechaFin) AS NumberDays,
R.FechaIni AS InitialDay,
R.FechaFin AS LastDay
FROM Reservaciones AS R
INNER JOIN Estancias AS E ON E.ClaEstancia = R.ClaEstancia
WHERE E.ClaUbicacionEst = 3
GROUP BY R.ClaTrab,R.ClaUbicacion, R.ClaEstancia, R.FechaIni, R.FechaFin
ORDER BY R.FechaIni
이지만, 내가, 내가 PIVOT을 시도 그것을 수행하는 방법을 잘 모릅니다하지만 난 내가 원하는 결과를 얻을 캔트.
자세한 정보가 필요하면 알려주세요. 대단히 감사합니다.
해결책 : 내가 무슨 짓을 는, 같은 기숙사에 PIVOT 새로운 컬럼의 결과를 노동자의 그룹을 만들에 의해 PARTITION을 통해 행 번호() 및 를 사용합니다. 새 쿼리에서 SNIPPET
SELECT * FROM(
SELECT
MAX(E.NomEstancia) AS ResidenceName,
R.FechaIni AS InitialDay,
R.FechaFin AS LastDay,
DATEDIFF(DAY, R.FechaIni, R.FechaFin) AS NumberDays,
T.NomTrab AS Worker,
R.ClaUbicacion AS UbicationID,
R.ClaEstancia AS ResidenceID,
ROW_NUMBER() OVER(PARTITION BY FechaIni,FechaFin, R.ClaUbicacion, R.ClaEstancia ORDER BY T.NomTrab) AS GUEST
FROM Reservaciones AS R
INNER JOIN Estancias AS E ON E.ClaEstancia = R.ClaEstancia
INNER JOIN Trabajadores AS T ON T.ClaTrab = R.ClaTrab
WHERE E.ClaUbicacionEst = 3
GROUP BY T.NomTrab, R.ClaUbicacion, R.ClaEstancia, R.FechaIni,R.FechaFin) AS ONE
PIVOT(MAX(Worker) FOR GUEST IN ([1],[2],[3])) AS pvt
나는 당신이 분을 사용할 수 있습니다 만이 명 노동자가있을 수 있기 때문에 새로운이 노동자
환영 SO에! 다음에 SO에 대한 좋은 질문을 게시하는 방법을 안내해주십시오. https://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ – Eli
동적 피벗에 대한이 게시물을보십시오. https://stackoverflow.com/questions/10404348/sql-server-dynamic-pivot-query/10404455#10404455 – Xedni
두 명의 작업자가 할당됩니다. 그렇지 않은 경우, 하드 코딩 할 수있는 최대 값이 있습니까? –