문제
질문을 다시 틀어 보자 ---
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
동일한 조항을 수행하려면 데이터가없는 모든 날짜를 잃게됩니다.