当前位置:首页 » 编程语言 » db2sql行转列
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

db2sql行转列

发布时间: 2022-01-17 01:01:02

sql多行转一行去重

先去重,再处理。

你是什么数据库

如果是oracle,可以只要用wm_concat的函数。

如果是其他数据库,比如sqlserver,请网络sqlserver wm_concat,有别人写好的函数。

⑵ DB2,实现查询结果中多行字段合并到一行上的SQL语句写法

WITH
t1 (id, DEPTNO, SEX, ENAME) AS
(
SELECT
ROW_NUMBER() OVER(PARTITION BY DEPTNO, SEX ORDER BY ENAME) AS ID,
DEPTNO,
SEX,
ENAME
FROM
temp
),
t2 (id, DEPTNO, SEX, ENAME) AS
(
SELECT
t1.id,
t1.DEPTNO,
t1.SEX,
CAST(t1.ENAME AS varchar(100)) AS ENAME
FROM
t1
WHERE
t1.id = 1
UNION ALL
SELECT
t1.id,
t1.DEPTNO,
t1.SEX,
CAST( t2.ENAME || ' ' || t1.ENAME AS varchar(100)) AS ENAME
FROM
t1, t2
WHERE
t1.DEPTNO = t2.DEPTNO
AND t1.SEX = t2.SEX
AND t1.id = (t2.id + 1)
)
SELECT
DEPTNO,
SEX,
ENAME
FROM
t2
WHERE
NOT EXISTS (
SELECT 1
FROM t2 t22
WHERE
t2.DEPTNO = t22.DEPTNO
AND t2.SEX = t22.SEX
AND t2.id < t22.id
);

DEPTNO SEX ENAME
----------- -------------------- -----------------------------------------------
-----------------------------------------------------
SQL0347W 递归公共表表达式 "TEST.T2" 可能包含无限循环。 SQLSTATE=01605

10 F aaa bbb ccc
20 M ddd eee fff
30 X ggg hhh ttt yyy
已选择 3 条记录,打印 1 条警告消息。
db2 =>

⑶ 如何在db2命令行运行sql必知必会例子

db2 => connect to dbName user xxx using password

db2 => sql语句

如果要执行一个sql脚本文件:

db2 => quit

c:\> db2 -tvf sql文件名
db2 -td@ -f filename
@是语句结束符。
E:\>db2 ? options
db2 [option ...] [db2-command | sql-statement |
[? [phrase | message | sqlstate | class-code]]]
option:-a、-c、-e{c|s}、-finfile、-lhistfile、-n、-o、-p、-rreport、-s、-t、
-td;、-v、-w、-x 和 -zoutputfile。

选项 描述 缺省设置
------ ---------------------------------------- ---------------
-a 显示 SQLCA OFF
-c 自动落实 ON
-e 显示 SQLCODE/SQLSTATE OFF
-f 读取输入文件 OFF
-l 将命令记录到历史文件中 OFF
-n 除去换行字符 OFF
-o 显示输出 ON
-p 显示 db2 交互式提示符 ON
-r 将输出报告保存到文件 OFF
-s 在命令出错时停止执行 OFF
-t 设置语句终止字符 OFF
-v 回送当前命令 OFF
-w 显示 FETCH/SELECT 警告消息 ON
-x 不打印列标题 OFF
-z 将所有输出保存到输出文件 OFF

注意:
使用 DB2OPTIONS 环境变量定制选项缺省值。
紧跟选项字母后的减号(-)使该选项关闭。
使用 UPDATE COMMAND OPTIONS 更改选项设置(以交互式或
文件输入方式)。

只能提供nt环境下编写脚本的例子给你以供参考:
脚本样例:
db2 connect to yourdb user yourname using yourpassword
db2 insert into newuser(username,password,email) values('Amy','1234','[email protected]')
db2 insert into newuser(username,password,email) values('Judy','1234','[email protected]')
db2 commit
db2 disconnect yourdb

运行脚本: 运行db2cmd X:\XXX.bat

以下摘自本论坛的FAQ可参考:
"
在命令窗口中运行DB2脚本,可用 db2 -svtf 脚本文件名 来实现。
例如,脚本文件名为sample.sql,运行:db2 -svtf sample.sql

参数中:
s 代表遇到错误时中止运行脚本
v 代表输出结果到屏幕
t 指以;号作为每行的分隔符
f 指后面需跟脚本文件名 "---此摘录版权归斑竹非本人所有

具体在AS400如何编写脚本非常遗憾.

db2 -x select SERIALNO from tabname where clause

C:>db2 attach to db2164 user ccp
输入 ccp 的当前密码:

实例连接信息

实例服务器 = DB2/NT 8.2.0
授权标识 = CCP
本地实例别名 = DB2164

C:>db2 connect to dw164 user ccp
输入 ccp 的当前密码:

数据库连接信息

数据库服务器 = DB2/NT 8.2.0
SQL 授权标识 = CCP
本地数据库别名 = DW164

C:>db2 select * from CCP_STS1 fetch first 2 rows only with ur

CUST_ID NOW_PRED_S LOAD_TIME
-------------------- -------------------- --------------------------
3094736. ZFS 2008-05-07-10.02.00.453000
3145886. ZFS 2008-05-07-10.02.00.453000

2 条记录已选择。

C:>db2 list command options

命令行处理器选项设置

后端进程等待时间(秒) (DB2BQTIME) = 1
连接至后端的重试次数 (DB2BQTRY) = 60
请求队列等待时间(秒) (DB2RQTIME) = 5
输入队列等待时间(秒) (DB2IQTIME) = 5
命令选项 (DB2OPTIONS) = +m

选项 描述 当前设置
------ ---------------------------------------- ---------------
-a 显示 SQLCA OFF
-c 自动落实 ON
-d 检索并显示 XML 声明 OFF
-e 显示 SQLCODE/SQLSTATE OFF
-f 读取输入文件 OFF
-i 显示 XML 数据并带有缩进 OFF
-l 将命令记录到历史记录文件中 OFF
-m 显示受影响的行数 OFF
-n 除去换行字符 OFF
-o 显示输出 ON
-p 显示交互式输入提示符 ON
-q 保留空格和换行符 OFF
-r 将输出保存到报告文件 OFF
-s 在命令出错时停止执行 OFF
-t 设置语句终止字符 OFF
-v 回传当前命令 OFF
-w 显示 FETCH/SELECT 警告消息 ON
-x 不打印列标题 OFF
-z 将所有输出保存到输出文件 OFF

C:>db2set DB2OPTIONS=-x
C:>db2 select * from CCP_STS1 fetch first 2 rows only with ur
4654908. ZFS 2008-05-07-10.02.00.453000
3716687. ZFS 2008-05-07-10.02.00.453000

⑷ db2中怎么用SQL将一张表中的两条数据合并成一行数据

selectA.姓名,A.数学as[数学(一)],A.英语as[英语(一)],A.时间as[时间(一)],
B.数学as[数学(二)],B.英语as[英语(二)],B.时间as[时间(二)]

onA.姓名=B.姓名
whereA.时间<B.时间
union
select姓名,数学as[数学(一)],英语as[英语(一)],时间as[时间(一)],
nullas[数学(二)],nullas[英语(二)],nullas[时间(二)]
fromyourtable
where姓名in(select姓名fromyourtablegroupby姓名havingCOUNT(时间)=1)

⑸ DB2/SQL怎样把列名变为一列数据

select W, X = (stuff((select ',' + X from table where W = a.W for xml path('')),1,1,'')) from table a group by W-- 将W相同的X列拼接成一个字符串用逗号隔开

⑹ 如何实现行转换成列,列转化为行在DB2中如何解决,急!!急!!!急!!!!

你的是什么数据库? sql server数据库: SELECT max(case id when 'a' then s1 end)a, max(case id when 'b' then s1 end)b, max(case id when 'c' then s1 end)c, max(case id when 'd' then s1 end)d FROM T1 union all SELECT max(case id when 'a' then s2 end)a, max(case id when 'b' then s2 end)b, max(case id when 'c' then s2 end)c, max(case id when 'd' then s2 end)d FROM T1 union all SELECT max(case id when 'a' then s3 end)a, max(case id when 'b' then s3 end)b, max(case id when 'c' then s3 end)c, max(case id when 'd' then s3 end)d FROM T1

⑺ DB2将一列数据拼接成一个字符串

用db2的xml函数,只适用于udb版本。
SELECT replace(replace(xml2clob(xmlagg(xmlelement(NAME a, tagname||';'))),'<A>',''),'</A>',' ')
FROM country

⑻ db2 一列截取成多列 如 '{"1","2","3"}'一列 变为'1','2','3' 三列

一个sql语句是很难达到的,db2不熟,下面是sql server里的方法,供你参考:

declare@svarchar(100),@sqlvarchar(1000)
set@s='1,2,3,4,5,6,7,8,9,10'
set@sql='selectcol='''+replace(@s,',','''unionallselect''')+''''
PRINT@sql
exec(@sql)

当然你可以用辅助表的方式,需要写更复杂的存储过程

⑼ DB2数据库行列转换

用sun函数做下打横操作