當前位置:首頁 » 編程語言 » 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函數做下打橫操作