|
我正在使用两个表在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
解决方案: |
|