2014-10-30 113 views
0

我試圖顯示存儲在數據庫中的某些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是用戶可訪問的參數。例如。 「全部」將提供所有系統。我現在需要的是強制顯示所有狀態。如果狀態「2_AA」不包含ID,則此查詢將導致條形圖簡單地排除該狀態,但我希望它顯示(儘管如此,沒有顯示,但表示在該狀態下沒有ID)。

我嘗試了EmptyPoint值,但沒有空值,所以這沒有幫助。包含所有狀態的硬編碼字符串的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

你可以與其他表連接,包含了所有的狀態,並使用ISNULL爲當沒有SnapshotTime:

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') 

這將始終顯示每一個狀態,並顯示爲0時,沒有SnapshotTime可用。

雖然沒有測試過代碼,只是編輯了你的代碼。

+0

你能告訴我如何添加一個包含所有狀態的表嗎?在數據集中?我被困在這一點上。 – EngJon 2014-10-30 13:58:00

+0

您的功能表位於何處?只需在那裏創建一個新表格,其中包含所有狀態。 – 2014-10-30 14:05:20

+0

因此,這不可能將數據表添加到報表本身?好的,我會看看是否可以在數據庫上創建表格 – EngJon 2014-10-30 14:07:28