2014-10-30 5 views
0

DB에 저장된 일부 ID에 대한 상태를 표시하려고합니다. 모든 것이 작동하지만 빈 포인트를 보여줘야합니다. ID가 실제로있는 상태 간의 간격으로 표시되어야합니다. 다음 쿼리는 표시되는 데이터를 정의합니다.막대 그래프에 빈 점 표시

SELECT [SnapshotTime] 
    ,[Id] 
    ,[Status] 
FROM [Features] 
WHERE (Status = '0_BB' 
OR Status = '1_RT' 
OR Status = '2_AA' 
OR Status = '3_EC' 
OR Status = '4_FD' 
OR Status = '5_ID' 
OR Status = '6_DR' 
OR Status = '7_finished') 
AND 
([SnapshotTime] = (SELECT MAX([SnapshotTime]) FROM [Features])) 
AND (FeatureSet = @System OR @System = 'ALL') 

@System은 사용자가 액세스 할 수있는 매개 변수입니다. 예 : "ALL"은 모든 시스템을 제공합니다. 지금 필요한 것은 모든 상태에 대한 강제 표시입니다. 상태 "2_AA"에 ID가 포함되어 있지 않으면이 쿼리는 해당 상태를 단순히 제외하는 막대 그래프로 연결되지만 그럼에도 불구하고 표시되도록 할 수 있습니다 (표시 줄은 없지만 간격에는 해당 상태에 ID가 없음을 나타냄).

EmptyPoint 값을 시도했지만 null 값이 없으므로이 방법이 도움이되지 않습니다. 모든 상태에 대해 하드 코딩 된 String을 포함하는 dataTable은 솔루션처럼 보이지만이 쿼리 또는 보고서에이를 삽입하고 통합하는 방법을 알지 못합니다. 그래서 강제로 빈 값으로 도와주세요.

답변

0

티노 (Tino)의 답변으로 나를 오른쪽 차선으로 가져 왔습니다. 다음 코드는 내 요구에 맞는 :

DECLARE @Statuses table(
SnapshotTime varchar(255), 
Id varchar(255), 
Status varchar(255)); 

INSERT INTO @Statuses(SnapshotTime,Id,Status) 
VALUES ('-1',NULL,'2_AA'); 
INSERT INTO @Statuses(SnapshotTime,Id,Status) 
VALUES ('-1',NULL,'3_EC'); 
INSERT INTO @Statuses(SnapshotTime,Id,Status) 
VALUES ('-1',NULL,'4_FD'); 
INSERT INTO @Statuses(SnapshotTime,Id,Status) 
VALUES ('-1',NULL,'5_ID'); 
INSERT INTO @Statuses(SnapshotTime,Id,Status) 
VALUES ('-1',NULL,'6_DR'); 

SELECT [SnapshotTime] 
     ,[Id] 
     ,[Status] 
    FROM [Features] 
    WHERE (Status = '0_BB' 
    OR Status = '1_RT' 
    OR Status = '2_AA' 
    OR Status = '3_EC' 
    OR Status = '4_FD' 
    OR Status = '5_ID' 
    OR Status = '6_DR' 
    OR Status = '7_finished' 
) 
    AND 
    ([SnapshotTime] = (SELECT MAX([SnapshotTime]) FROM [Features])) 
    AND (FeatureSet = @System OR @System = 'ALL') 
UNION ALL 
    SELECT [SnapshotTime] 
     ,[Id] 
     ,[Status] 
    FROM @Statuses 

나는이 adding EmptyPoint properties없이 작동하지 않습니다 확신 해요.

1

당신은 모든 상태를 포함, 다른 테이블과 조인 더 SnapshotTime가 없을 때를 위해 ISNULL을 사용할 수

SELECT 
    ISNULL(f.[SnapshotTime], 0), f.[Id], s.[Status] 
FROM 
    [Features] AS f 
    RIGHT JOIN [Statuses] AS s 
     ON 
      f.[Status] = s.[Status] 
WHERE 
    ([SnapshotTime] = (SELECT MAX([SnapshotTime]) FROM [Features])) AND 
    (FeatureSet = @System OR 
     @System = 'ALL') 

이것은 모든 상태를 표시하고, 더 SnapshotTime가 없을 때 0을 보여 항상 것입니다.

코드를 테스트하지는 않았지만 코드를 편집했습니다.

+0

모든 상태의 테이블을 추가하는 방법을 알려주시겠습니까? 데이터 세트에서? 나는 그 시점에 붙어있다. – EngJon

+0

기능 테이블은 어디에 있습니까? 모든 상태를 포함하는 새 테이블을 만드십시오. –

+0

그래서 보고서 자체에 데이터 테이블을 추가 할 수 있습니까? DB에 테이블을 만들 수 있는지 확인해 보겠습니다. – EngJon

관련 문제