| [b]NO[/b] |
[b]MONEY[/b] |
[b]DAY[/b] |
| 1 |
23 |
1 |
| 1 |
43 |
2 |
| 1 |
-45 |
3 |
| 2 |
42 |
1 |
| 2 |
-10 |
2 |
| 2 |
50 |
3 |
| 3 |
100 |
8 |
为了符合阅读习惯,最终报表希望是如下格式:
| [b]NO[/b] |
[b]MON[/b] |
[b]TUE[/b] |
[b]THR[/b] |
| 1 |
23 |
43 |
-45 |
| 2 |
42 |
-10 |
50 |
| 3 |
|
|
|
------------------------
咱们一步步来实现:
1.运用DECODE转换行为列
[b]SQL:[/b]
SELECT NO,
DECODE(DAY,1,MONEY,'') DAY1,
DECODE(DAY,2,MONEY,'') DAY2,
DECODE(DAY,3,MONEY,'') DAY3
FROM TEMP
[b]结果:[/b]
| [b]NO[/b] |
[b]DAY1[/b] |
[b]DAY2[/b] |
[b]DAY3[/b] |
| 1 |
23 |
|
|
| 1 |
|
43 |
|
| 1 |
|
|
-45 |
| 2 |
42 |
|
|
| 2 |
|
-10 |
|
| 2 |
|
|
50 |
| 3 |
|
|
|
2.按NO字段分组,并更改列名
[b]SQL:[/b]
SELECT NO, MAX(DAY1)
MON, MAX(DAY2)
TUE, MAX(DAY3)
THR
FROM (SELECT NO,
DECODE(DAY, 1, MONEY,'') DAY1,
DECODE(DAY, 2, MONEY,'') DAY2,
DECODE(DAY, 3, MONEY,'') DAY3
FROM TEMP)
GROUP BY NO;
[b]结果:[/b]
| [b]NO[/b] |
[b]MON[/b] |
[b]TUE[/b] |
[b]THR[/b] |
| 1 |
23 |
43 |
-45 |
| 2 |
42 |
-10 |
50 |
| 3 |
|
|
|
------------------------
重难点归纳:
[b]1.DECODE缺省值设置[/b]
DECODE语法如下:decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)
如果缺省值由''(两个单引号)改为0,即SQL:
SELECT NO, MAX(DAY1) MON, MAX(DAY2) TUE, MAX(DAY3) THR
FROM (SELECT NO,
DECODE(DAY, 1, MONEY,0) DAY1,
DECODE(DAY, 2, MONEY,0) DAY2,
DECODE(DAY, 3, MONEY,0) DAY3
FROM TEMP)
GROUP BY NO;
结果如下(
所有值为负与空值都被赋为0):
| [b]NO[/b] |
[b]MON[/b] |
[b]TUE[/b] |
[b]THR[/b] |
| 1 |
23 |
43 |
0 |
| 2 |
42 |
0 |
50 |
| 3 |
0 |
0 |
0 |
[b]2.列缺省值设置(DAY值为8的显示为'undefined')[/b]
[b]SQL:[/b]
SELECT NO,MONEY,
DECODE(DAY,1,'MON',2,'TUE',3,'THR','undefined') DAY
FROM TEMP
[b]结果:[/b]
| [b]NO[/b] |
[b]MONEY[/b] |
[b]DAY[/b] |
| 1 |
23 |
MON |
| 1 |
43 |
TUE |
| 1 |
-45 |
THR |
| 2 |
42 |
MON |
| 2 |
-10 |
TUE |
| 2 |
50 |
THR |
| 3 |
100 |
undefined |
[b]3.行列转化在表单内数据量较大的情况下消耗较大[/b]
原因:
1.扫描目标数据时间开销大。
2.GROUP BY时,数据冗余带来的多行合并。
[b]优点:[/b]
[b]表结构稳定:DAY增加新值只需增加记录,无需新增新列![/b]
下一页 decode()函數使用技巧
当前1/2页 [b]1[/b][url=http://www.1sucai.cn/article/20097_2.htm]2[/url][url=http://www.1sucai.cn/article/20097_2.htm]下一页[/url][url=http://www.1sucai.cn/article/20097_all.htm]阅读全文[/url]