2016-11-03 5 views
1

Iは以下のようにクエリを有する:クエリ結果から行内のセルを空白にする方法はありますか?

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」列は「整数」型ですが、どうすればそのようになりますかtブランク?

答えて

2

を使用しています。 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

nullがあるので、あなたは、単に

..... 

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

ヌルを選択することができますあなたが最初のクエリの上に追加しようとするタイプではありません

@ジョナサンレフラーによってsuggusted
DEFINE test INT; 
LET test = NULL; 


...... 

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

などあなたが射影リストにNULLを使用することができますが、列の型を持っている必要がありますInformixのではNULL::INTEGERまたはCAST(NULL AS INTEGER)

+0

NULLを選択すると、エラーが発生します。私は、クエリをテストするためにSQL Workbenchを使用しています。 – Newbee

+0

私はasnwerを更新します。..希望は明確で有用です。 – scaisEdge

+2

@Newbee:Informixでは、nullのタイプを指定する必要があります。 'NULL :: INTEGER' - 普通の' NULL'だけを使用するのではなく、どんなタイプでも使用できます。また、必要に応じて 'CAST(NULL AS INTEGER)'を使用することもできます。 –

関連する問題