2016-11-03 66 views
1

我有如下的查詢:如何使查詢結果中的單元格變爲空白?

SELECT 
    cc.chain_desc as chain_desc 
    ,cc.chain_id as chain_id 
    ,COUNT(distinct t.trans_id) as TranCount 
FROM TRANSACTION AS t 
LEFT OUTER JOIN location AS l 
ON t.location_id = l.location_id 
LEFT OUTER JOIN trans_line AS tl 
ON t.trans_id = tl.trans_id 
LEFT OUTER JOIN contract as c 
ON t.contract_id = c.contract_id 
LEFT OUTER JOIN chain_desc as cc 
ON l.chain_id = cc.chain_id 
WHERE 
t.loc_country = 'U' 
AND c.issuer_id IN (156966,166203) 
AND t.trans_date >= '2016-10-01 00:00' 
and t.trans_date < '2016-10-31 00:00' 
AND tl.cat NOT IN ('DEF','DEFD','DEFC') 
GROUP BY cc.chain_desc, cc.chain_id 


UNION 

SELECT 
    'TOTAL' 
    ,0 
    ,COUNT(distinct t.trans_id) 
FROM TRANSACTION AS t 
LEFT OUTER JOIN location AS l 
ON t.location_id = l.location_id 
LEFT OUTER JOIN trans_line AS tl 
ON t.trans_id = tl.trans_id 
LEFT OUTER JOIN contract as c 
ON t.contract_id = c.contract_id 
LEFT OUTER JOIN chain_desc as cc 
ON l.chain_id = cc.chain_id 
WHERE 
t.loc_country = 'U' 
AND c.issuer_id IN (156966,166203) 
AND t.trans_date >= '2016-10-01 00:00' 
and t.trans_date < '2016-10-31 00:00' 
AND tl.cat NOT IN ('DEF','DEFD','DEFC') 

執行時上述查詢reurns以下結果:

enter image description here

我需要的結果顯示如下:

enter image description here

列「Chain_Id」是「整數」類型,我該如何使tha t空白?

回答

2

在Informix中,您可以在投影列表中使用NULL,但該列必須有一個類型。由於Informix NULL沒有類型,因此您需要使用CAST

SELECT NULL::INTEGER AS id FROM systables WHERE tabid = 1; 

SELECT CAST(NULL AS INTEGER) AS id FROM systables WHERE tabid = 1; 

您可以檢查這個問題的答案(Informix: Select null problem)。

您可以檢查IBM知識中心(NULL Keyword)。

2

的一種方法是將轉換爲NULL

(case when cc.chain_id <> 0 then cc.chain_id end) as chain_id 

另外就是一切轉換爲字符串:

(case when cc.chain_id <> 0 then cast(cc.chain_id as varchar(255)) else '' end) as chain_id 
3

,你可以簡單地選擇空

..... 

UNION 

SELECT 
    'TOTAL' 
    , NULL::INTEGER 
    ,COUNT(distinct t.trans_id) 
FROM TRANSACTION AS t 
LEFT OUTER JOIN location AS l 
ON t.location_id = l.location_id 
LEFT OUTER JOIN trans_line AS tl 
ON t.trans_id = tl.trans_id 
LEFT OUTER JOIN contract as c 
ON t.contract_id = c.contract_id 
LEFT OUTER JOIN chain_desc as cc 
ON l.chain_id = cc.chain_id 
WHERE 
t.loc_country = 'U' 
AND c.issuer_id IN (156966,166203) 
AND t.trans_date >= '2016-10-01 00:00' 
and t.trans_date < '2016-10-31 00:00' 
AND tl.cat NOT IN ('DEF','DEFD','DEFC') 

,因爲空是不是您可以嘗試在第一個查詢上方添加的類型

DEFINE test INT; 
LET test = NULL; 


...... 

SELECT 
    'TOTAL' 
    , test 
    ,COUNT(distinct t.trans_id) 
    ..... 

還是喜歡通過@Jonathan萊弗勒suggusted使用NULL::INTEGERCAST(NULL AS INTEGER)

+0

如果我選擇NULL,則出現錯誤。我正在使用SQL Workbench來測試查詢。 – Newbee

+0

我希望更新asnwer ..希望清晰有用 – scaisEdge

+2

@Newbee:在Informix中,您需要指定null的類型 - 例如, 'NULL :: INTEGER' - 而不是隻使用普通的'NULL',它可以是任何類型。如果你願意,你也可以使用'CAST(NULL AS INTEGER)'。 –