|
我正在使用两个表在SQL Server(SSMS)中工作:
, S1 \* C/ ^8 D7 O4 Hprop_ppl:
( w7 c: ^" F2 K% W9 `' jid_numb id_pers cdate val) u* e0 d) j8 f" w
1 4 NULL NULL7 }4 w( v' @) I8 g2 g; \/ e
2 2 2018-12-12 250
. X6 T: @/ @# j3 1 2018-12-01 250
$ u$ a# D9 M1 L7 N& @4 3 2018-12-11 5006 K& H3 |7 s% y3 K$ {
5 6 2018-01-01 500
/ h0 C4 |, o7 w6 5 2018-12-12 480
) f. e& I1 {% A1 V) Q% Jppl:6 V4 z0 a6 S7 r; u
id_perc name& |' D0 e, q8 z0 c9 @
1 John
. P( L, O9 `5 g+ v4 O: F2 Derek
+ o( ^# c. Q$ {8 j w3 Mia
/ t6 E7 z. F$ r+ N* k5 Q( r8 n4 Chris5 K+ x+ ]% }, w6 Q$ i6 q( G( c
5 Ann a9 q1 w4 U! X; l
6 Dave5 u2 i# D* D' I! T8 n+ o
然后我需要得到这样的表:
6 q4 L; G4 L/ W- o' z; X# q name
y' u- d$ S6 X- qid_numb value
, e& T3 C2 H7 Y! H- l对于这些表,应在必要时查找日期为2018/12/12的ppl的所有值:: b$ q2 ^5 L" U& F0 B
Derek Ann
: {) X" z6 l' O9 y2 w* j2 250 08 B' x @' E( C7 o- D, U% ] ]
6 0 NULL
4 c- F+ o. m3 _6 L4 ~代码:- W; P( C% q- o0 n/ u) K! L$ B
CREATE TABLE ppl(
( y4 W2 y$ M* G+ J+ z: Q! X id_perc smallint PRIMARY KEY,+ q" D, Q7 Z# B/ [8 X* U! G8 a
name varchar(50) NOT NULL
1 p/ h/ t; z0 \)
3 T0 @1 ?9 N' ?9 P) Z- OCREATE TABLE prop_ppl(
$ A# d! X# D+ O) p# G8 p/ r id_numb int IDENTITY(1,1) PRIMARY KEY,
. a$ P2 |7 g+ b7 `! n' E/ p id_perc smallint NOT NULL,6 I# n& z, x! V, l6 K* w
cdate smalldatetime,+ a1 p* V0 `: X8 `( M. u, b1 Q
val int
: A, n; e9 I' O( K! ^! ? ): z8 q! v# g) S: P- E5 M
INSERT INTO dbo.ppl (id_perc, name)9 X& U) Q! G2 v
VALUES (1, 'John'), (2, 'Derek'), (3, 'Mia'), (4, 'Chris'), (5, 'Ann'),
$ r/ Y, I* y M# l6 @' ]9 A) G (6, 'Dave')" M& V& k( D+ H4 ?
INSERT INTO dbo.prop_ppl (id_perc, cdate, val)
. i2 j, E3 a8 ^7 ^7 l: dVALUES (4, NULL,NULL), (2,'20181212', 250), (1, '20181201', 250),
2 d1 Q$ H0 t7 G9 N( w (3, '20181211',500), (6,'20180101', 500), (5, '20181212', 480)0 w7 s+ n- } v
然后我尝试使用:
4 F4 B. y8 i* ?SELECT *
2 m: [# o% e) iFROM (
0 ^- A' E! t0 n# B7 c8 G SELECT name,id_numb,val
3 l7 F, E' m4 `! X0 v$ X FROM prop_ppl 4 G9 t, s' @/ N8 ?1 C
JOIN ppl ON prop_ppl.id_perc = ppl.id_perc
. `+ p" N* s5 U6 o: q# Y9 ^9 h1 G WHERE cdate='20181212'* w3 S* l" R3 R/ P
)' Z" V+ D1 a2 k# ]* I0 r
PIVOT(5 e% C6 l" Y! U" K0 g
SUM(val) ' p4 |2 J/ ]: D
FOR [name] in ('Derek','Ann')* O, ^: d4 @- h, i9 a, `! h. E
)
/ i# N f M% [( y" i& h; f但出现错误“ 关键字“ PIVOT”附近的语法不正确。 ”$ Y0 y2 O+ ?2 h9 [; ^ Q
也许,也可以不使用PIVOT。。另外,我想了解如何将此脚本应用于任意参数(而不仅仅是Derek和Ann)。
' Q: Z1 A6 \- b& C- B0 C
5 X# ]1 a- v& S. m( e0 d0 I, k解决方案: |
|