2013-07-15 21 views
1

當我運行下面的查詢,如何添加字母導致數據

select 
NVL(week, 'SUM) week 
    , sum(A) AS A, sum(B) AS B 
from 
    (
    select b.* 
    from TABLE b 
    where b.week between '2013051' and '2013052' 
) 
group by ROLLUP(WEEK) 

我得到的數據,如

| WEEK | 

    2013051 

    2013052 

但我要對數據進行如下命名。

| WEEK | 

2013. 05. 1 WEEK 

2013. 05. 2 WEEK 

任何人都可以幫我解決這個問題嗎?

+1

你不需要把''放在所有問題的標題中;無論如何,你用[SQL]標記它們,所以它只是噪音,並使標題有點難以閱讀。 –

回答

5

假設week是一個字符串:

select substr(week, 1, 4) 
    ||'. '|| substr(week, 5, 2) 
    ||'. '|| substr(week, 7, 1) ||' WEEK' as week, 
... 

或者,如果week可以爲null(它不能從您的數據,因爲你的子查詢的過濾器,但你從你的rollup生成的空值我最初錯過):

select case when week is null then 'SUM' 
    else substr(week, 1, 4) 
     ||'. '|| substr(week, 5, 2) 
     ||'. '|| substr(week, 7, 1) ||' WEEK' end as week, 
... 

WEEK      A   B 
---------------- ---------- ---------- 
2013. 05. 1 WEEK   1   2 
2013. 05. 2 WEEK   3   4 
SUM      4   6 

SQL Fiddle demo;和一個without the subquery,這在這裏看起來是多餘的。

1

如果你的版本的RDBMS是10g或更高版本,該regexp_replace功能,可以用來做一個自定義字符串格式,以及:

select regexp_replace( 
     week, -- if week is of varchar2 datatype or to_char(week) if it's of number datatype 
     '^([[:digit:]]{4})([[:digit:]]{2})([[:digit:]]{1})$', '\1. \2. \3 WEEK' 
     ) 
    from your_table_name_or_subquery 

結果:

WEEK  
------------------ 
2013. 05. 1 WEEK 
2013. 05. 2 WEEK 
相關問題