미친 SQL 질문 : 일종의 크로스를 수행하는 방법은 피벗에 적용됩니까?

StackOverflow https://stackoverflow.com/questions/1691326

  •  18-09-2019
  •  | 
  •  

문제

고객은 자신의 데이터에 바로 가기를 가지고 있습니다. 레코드의 수량 필드에서. 구문 분석 할 때, 나는 각 수량에 대해 하나의 레코드를 제조해야하며, "식별자"를 7 일 씩 증가시켜야합니다 (숫자는 날짜를 나타 내기 때문입니다.

예 : 4 주 동안 판매되는 단일 제품이며 매주 4 개의 레코드, 1 개의 제품이 필요합니다.

이벤트 번호 분류 주 실행 일부 데이터
 2009 11 29 00           1                   1        일주일에 실행됩니다
 2009 12 06 00           2                   1        일주일에 실행됩니다
 2009 12 13 00           1                   4        4 주간 달린다
 2009 12 20 00           2                   4        4 주간 달린다

어쨌든이 데이터를보기 (SQL Select)와 함께 다음 데이터로 전환해야합니다 (모두 동일한 테이블에있는 공백이 포함되어 있습니다.

이벤트 번호 + 분류 일부 데이터
          2009 11 29 01           일주일 동안 실행됩니다 따라서 일주일에 한 번의 기록.
          2009 12 06 02           일주일 동안 실행됩니다

          2009 12 13 01           4 주 동안 실행됩니다 날짜가 4 번 증가합니다
          2009 12 20 01           4 주 동안 실행됩니다
          2009 12 27 01           4 주 동안 실행됩니다
          2009 01 03 01           4 주 동안 실행됩니다

          2009 12 20 02           4 주 동안 실행됩니다 날짜가 4 번 증가합니다
          2009 12 27 02           4 주 동안 실행됩니다
          2009 01 03 02           4 주 동안 실행됩니다
          2009 01 10 02           4 주 동안 실행됩니다

내 생각은 일종의 Pivot Cross를 적용하는 SQL 코드를 가야합니까?

도움이 되었습니까?

해결책

저렴한 답변이 있습니다. "사전 렌더링"을 사용합니다. Weeks 쿼리 기반 루프를 생성하는 테이블. 예상 범위의 시나리오를 다루기 위해 충분한 주를 충분히 넣어야합니다.

[Week]
1
2
3
4

그런 다음 쿼리에 참여하십시오 [Weeks Running] 이 표에 불평등을 사용합니다 OriginalTable.WeeksRunning <= Weeks.Week. 당신은 일주일에 한 줄로 끝납니다.

추가하여 날짜를 추론합니다 Weeks.Week * 7 이벤트 번호에 포함 된 날짜까지.

다른 팁

이것은 데이터베이스 측지가 아닌 애플리케이션 측면에서 더 간단한 일이지만, 샷을 줄 것입니다 ... CTE를 지원하는 데이터베이스가 필요합니다. 이것은 테스트되지 않았습니다.

WITH RECURSIVE expandedTable(eventNumber, classification, index, count, someData)
AS (
    SELECT eventNumber, classification, 1, weeksRunning, someData
    FROM originalTable
    WHERE weeksRunning > 0
  UNION ALL
    SELECT eventNumber + 7, classification, index + 1, count, someData
    FROM expandedTable
    WHERE index < count
)
SELECT eventNumber, classification, someData
FROM expandedTable;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top