回答

收藏

如何在SQL中的单行内串联多行?

技术问答 技术问答 227 人阅读 | 0 人回复 | 2023-09-14

如何使用SQL将多行连接成一行?我的数据库是DB2
: u# D" I& k1 @# ]) q( FTableFoo( L/ f0 V. T! n. q! i# x
-------4 q; R( t/ J7 ?
Id      Name
( p+ n8 C1 D! x3 Y/ W, ^; Y  p; @5 t 1       Apples
9 I% u* H* l! i& R 1       Tomatoes7 Q( _  S; k% i2 g7 K1 _  |' _
1       Potatoes
* I( F  A( z, w& p, e 2       Banana
8 l/ A# N7 p3 L. [. H2 j, m 2       Peach& ?2 ]: R0 ], b( a
我想要类似的东西3 Q5 X2 ^; E( ~3 H6 q5 n
ID       FruitsAvailable: n) V$ h; {( Z6 B, z
-------------------------
( q( s; l. I/ m9 T 1       Apples, Tomatoes, Potatoes
; K" b* ~3 l: i1 D3 \               
+ l8 u. w* U8 r& {- _解决方案:# t9 o/ h8 N; |  O3 G# ?
               
0 Y# V  z- n4 q5 G/ n, N. y- `% b# Q, W+ r" N  g
- W- `* e( O7 {& x9 T
                试试这个' o/ a% f" q$ O- Z3 ?* [
  SELECT id ,FruitsAvailable
8 |+ E2 ?/ k/ t: K: n  FROM
) v: {( _; P- y2 a3 Y$ k      (SELECT id , group_concat(Name) as FruitsAvailable
0 x3 k" r: S5 k! s       FROM  TableFoo
/ G* {* d* L2 r' Y       WHERE id = 1) t
4 `7 K' M' C; E# T! H) E: p这里演示SQLFIDDLE2 S3 j% I, Q9 F, Y
编辑:在db2中,您需要创建函数,然后调用它
3 \- s" m, Y! T CREATE FUNCTION MySchema/MyUDF (
2 s8 u; I7 j' {" D; s$ p3 WPARCol2 CHAR(5) )+ p: b; ~  [! }
RETURNS VARCHAR(1024)   0 L! j& m6 n* R  a. n# n8 [
LANGUAGE SQL
+ I: q% e4 o- W9 @NOT DETERMINISTIC
" m% N% m8 j3 S) ~' B8 ?2 DREADS SQL DATA
) r! j* Z' F* |/ L0 p/ ICALLED ON NULL INPUT
& ]. G: I. Z) }% g* |9 z/ l  w0 LDISALLOW PARALLEL
  G( n3 Q; ^& v/ I+ T7 V BEGIN 7 g5 u! W1 R) Z3 P& }& y
  DECLARE ReturnVal VARCHAR(1024) NOT NULL DEFAULT '';
* h4 o7 e- ~, V' ^* }7 z  T  FOR CsrC1 AS C1 CURSOR
' a# \& {/ g8 Y: x      FOR SELECT MyCol1 ( W. C+ D1 A0 R6 I0 [
             FROM MyTable $ Y, \* x! P- d$ b
             WHERE MyCol2 = ParCol2 7 O7 q# l3 h+ C$ W" N) c
      DO SET ReturnVal = ReturnVal Concat CsrC1.MyCol1;
& A5 ^7 a; t& }" N  END FOR;
  f& m/ F/ V( T% I( o, u  RETURN LTRIM(ReturnVal);
; P" X2 U. O6 n$ T% F8 H$ ~* Y END  ;
. Y; R6 V4 u; g0 l$ D然后在这里叫! G; e% s7 u: _* B9 c+ f) W  i
     Select  id, MyUDF(Name) as FruitsAvailable# F9 Y. s8 r$ G3 E4 L
     From TableFoo
+ |9 m; v5 T9 L* l2 F     where id = 1
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则