回答

收藏

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

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

我正在使用两个表在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解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则