1、行转列函数
11gR2以前:
WM_CONCAT函数,
使用方式形如:
SELECT SUS_SNO,WM_CONCAT(SRC_FILENAME) AS AAA FROM AML_SUS_TRD_FILE GROUP BY SUS_SNO;
首先,数据表内容如下:
SELECT * FROM AML_SUS_TRD_FILE;
目前5条记录,SUS_SNO=1对应的有4条,SUS_SNO=2的有1条记录,前面给出的使用方法出现的效果如下:
那么我们现在已经得到了按照一个编号取得了对应的列转入行数据的效果了。
注意:这里不自己选择分组的话,仅仅使用WM_CONCAT函数会将参数列的所有数据集合到一条记录中
默认分隔符是逗号,不需要的话可以用replace函数再进行替换。
11gR2给出了一个新的函数LISTAGG:
语法:LISTAGG( [,]) WITHIN GROUP (ORDER BY ) [OVER (PARTITION BY )]
- 需要聚合的列或者表达式
- WITH GROUP 关键词
- 分组中的ORDER BY子句
SQL:SELECT SUS_SNO,LISTAGG(SRC_FILENAME,',') WITHIN GROUP (ORDER BY SRC_FILENAME) AS AAA FROM AML_SUS_TRD_FILE GROUP BY SUS_SNO
一样可以达成前面函数的效果。
注意:不分组依旧是聚合到一行数据中 。可以在函数参数中自由选择分隔符。
2、sys账户密码忘记后的办法
win+R 进入console;输入命令"sqlplus /nolog",进入Oracle命令模式;输入"conn / as sysdba";然后就是正常的修改密码"alter user sys identified by password";
注意:此方法适用于Oracle本机适用,然后测试过程发现新密码跟原密码都可以使用。
3、SQL Sever 2008R2 某个数据库的ldf文件过大,笔者体验是40G+,硬盘直接炸了。
下列语句中【DB替换为目标DB】
USE [master]
ALTER DATABASE [DB]
SET RECOVERY SIMPLE WITH NO_WAIT
ALTER DATABASE [DB]
SET RECOVERY SIMPLE
GO
USE [DB]
DECLARE @logname VARCHAR(150)
SELECT @logname = name
FROM sys.database_files
WHERE name LIKE'%log'
DBCC SHRINKFILE(@logname, 11, TRUNCATEONLY)
GO
USE [master]
ALTER DATABASE [DB]
SET RECOVERY FULL WITH NO_WAIT
ALTER DATABASE [DB]
SET RECOVERY FULL
GO