回答

收藏

将PIVOT与2个相关表一起使用

技术问答 技术问答 536 人阅读 | 0 人回复 | 2023-09-11

我正在使用两个表在SQL Server(SSMS)中工作:2 m8 Y# b( N; L+ m0 m8 p# Q
prop_ppl:
0 ?4 s2 X/ x/ s# M; m! [/ `id_numb  id_pers       cdate       val( n' C1 m  o; x2 J9 L  N
1         4            NULL      NULL! a9 N; Z6 W* Z# i% j) ?) @( p; E9 o
2         2        2018-12-12    250  Y- Z; d2 G, b8 H* ]
3         1        2018-12-01    250
2 ~. A+ E+ ^" n) e3 h! C* C0 t+ R4         3        2018-12-11    500
: d5 m% ^! m+ K6 ^5         6        2018-01-01    500( S1 b; M, |) C, A5 D
6         5        2018-12-12    480
) b- a. p0 J  ~5 w* M, l' \ppl:
0 G# H$ f& B* ^/ wid_perc   name% F- v3 Z/ h) r6 O6 z
1         John) ]/ J/ B* J0 m' e
2         Derek
; D6 p, d% |1 E+ W/ [) T4 N3 T3          Mia
  w. E/ X/ d7 C  B4         Chris4 b4 E2 X+ Z2 h3 \
5          Ann
2 r0 E- \  T8 n7 J8 U6         Dave
6 v9 b* l! ~& ~  d7 T) j9 P然后我需要得到这样的表:
5 l7 E3 ]2 t0 D           name
  }; L% r. `7 S% W# F0 J) S8 c' T# {1 Gid_numb   value1 n2 t. e8 L- m  K1 a' h1 _
对于这些表,应在必要时查找日期为2018/12/12的ppl的所有值:2 q+ W! j3 Q6 B6 Z: J
     Derek    Ann" G$ m/ s, b: R
2     250      0
9 C& y8 ]/ M% L; }6      0     NULL
' U3 e/ \1 |7 I; \% ?7 m代码:: o( r! w1 K4 t
CREATE TABLE ppl(
. R3 }' |1 n3 f) y    id_perc smallint PRIMARY KEY,
; W% s2 ^! Z+ G+ Z. C    name varchar(50) NOT NULL/ b& X! U$ o# S' L3 |
)
% p  L$ f  g9 x. \% pCREATE TABLE prop_ppl(: Z, f3 O% k1 e9 U
    id_numb int IDENTITY(1,1) PRIMARY KEY,3 ]; q  g8 ]4 U6 O4 v1 q
    id_perc smallint NOT NULL,
! O9 l' u1 ?) E3 m/ I, D    cdate smalldatetime,
! m' j  V* L' r) c2 V2 _/ `    val int
+ f) M$ s$ L0 V2 G( `/ |- u4 `    )  a' M! G7 E# O) C, `4 L
INSERT INTO dbo.ppl (id_perc, name)
2 _) y6 D2 r: c5 IVALUES (1, 'John'), (2, 'Derek'), (3, 'Mia'), (4, 'Chris'), (5, 'Ann'), 7 Y- m* q' i/ P2 X+ f. ]0 B
        (6, 'Dave')
: J6 ?6 B# A: e: b) [INSERT INTO dbo.prop_ppl (id_perc, cdate, val)! [, ]" J# y9 F; y
VALUES (4, NULL,NULL), (2,'20181212', 250), (1, '20181201', 250),6 Z: K& g. _. r" _+ h" [3 N
    (3, '20181211',500), (6,'20180101', 500), (5, '20181212', 480)
0 u6 d0 ]/ M3 W  j# R% s* B然后我尝试使用:7 x( _: \+ G/ h) P( A$ Q
SELECT *
. o: i7 }5 g# p% u0 q3 \& hFROM (  , {/ f5 J$ R0 ^, E& X
    SELECT name,id_numb,val     7 ]( q& M2 g+ T) V
    FROM prop_ppl
# Y6 X( f  O, r    JOIN ppl ON prop_ppl.id_perc = ppl.id_perc! s" n8 e3 k5 o4 t( v" U4 E) u/ n
    WHERE cdate='20181212'9 ^8 F' U  G4 f, I* A6 m3 u- j
    )
! S$ }* N4 v' |" `PIVOT(  Z) m8 s0 ~% {- R$ X: c) d/ t
    SUM(val)
- i6 D* }6 j, S: x" e3 Z    FOR [name] in ('Derek','Ann')
$ ]$ V6 s9 N' P9 ^) f* n      )  Q$ E$ N0 q2 Y7 o9 n
但出现错误“ 关键字“ PIVOT”附近的语法不正确。# a9 \; {& |" t. _4 a7 d
也许,也可以不使用PIVOT。。另外,我想了解如何将此脚本应用于任意参数(而不仅仅是Derek和Ann)。- [+ m% ~$ c& L, a" s
                ! J  r2 k3 J4 a. F+ V' p
解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则