문제

질문을 다시 틀어 보자 ---

  table1{date, bID, sName, fID}
    {11/05,B1,A1,P1}
    {12/05,B2,A2,P2}
    {13/05,B1,A3,P1}
    {15/05,B3,A4,P1}
    {16/05,B1,A5,P2}
    {19/05,B1,A6,P2}

이것은 테이블이고 표에 저장된 데이터도 지정됩니다 ...

이제 내가 원하는 쿼리는 다음과 같습니다.-

FID에 따라 (P1이 선택 되었음) 11/05-17/05에서 테이블의 데이터를 표시해야합니다 (날짜가 없어야 함). 검색된 데이터는 다음과 같습니다.-

11/05,B1,A1
12/05,--,--
13/05,B1,A3
14/05,--,--
15/05,B3,A4
16/05,--,--
17/05,--,--

특정 FID (예 : P1)에 대해 검색된 데이터가 표시됩니다. 결과 설명 ...

1) 데이터베이스에 날짜가없는 경우 FID가 P1 인 11/05-17/05에서 모든 데이터를 표시 한 경우 해당 날짜의 NULL 값을 표시해야합니다 (IE14/05 날짜는 데이터베이스에 없었지만 없었습니다. 여전히 널 값으로 표시되었습니다) ..

2) 특정 날짜의 FID가 P1이 아닌 경우 결과 세트에 널 값을 저장합니다.

데이터가 결과 세트에서 검색되고 추가로 처리됩니다.

이 문제에 대한 쿼리를 쓰고 싶습니다. 가능합니까 ..

도움이 되었습니까?

해결책

여기에 코드가없고 내 생각 만.

시작 날짜부터 종료 날짜에 이르는 날짜가있는 임시 테이블을 만들어야합니다. 그리고 left join table1 그 임시 테이블이 켜져 있습니다 date 열 플러스 추가 where fID = ?.

다른 팁

여기에 다른 대답이 언급했듯이 모든 날짜가있는 테이블, 그리고 LEFT JOIN 당신이 필요로하는 것입니다.

이 테이블이 있다고 말합니다.

CREATE TABLE table1
{
    date    DATETIME
    bID     VARCHAR(10),
    sName   VARCHAR(10),
    fID     VARCHAR(10)
}

그리고이 날짜 테이블 :

CREATE TABLE dates
(
    dt      DATETIME
)

이 테이블에서는 표시하려는 범위의 모든 날짜가 있어야합니다. 보통 당신은 양방향으로 몇 년 동안 그것을 채우지 만 그것은 당신에게 달려 있습니다.

참고 : 단순화를 위해 두 테이블의 기본 키를 귀찮게하지 않았습니다. 물론 기본 키가 있는지 확인해야합니다. dates 테이블, 그것은 될 수 있습니다 dt 열.

그런 다음 원하는 결과를 표시합니다.

SELECT
    dt,
    bID,
    sName
FROM
    dates
    LEFT JOIN table1 ON dt = date AND fld = 'P1'
ORDER BY
    dt

선택 만 선택하십시오 P1 행에서 행이 이루어집니다 JOIN 기준. 추가하면 a WHERE 동일한 조항을 수행하려면 데이터가없는 모든 날짜를 잃게됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top