回答

收藏

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

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

我正在使用两个表在SQL Server(SSMS)中工作:& H- m- r1 s4 B! H) @
prop_ppl:
; |# t* }6 `1 P; d9 @5 ~0 Sid_numb  id_pers       cdate       val
6 m5 g7 Z+ F) M; k1         4            NULL      NULL
: [8 T. c9 k$ l& T6 H. d2         2        2018-12-12    250
8 ~: I* ^, H% O, z* Q3         1        2018-12-01    250" s) F8 S1 j2 G3 a# i; @
4         3        2018-12-11    500
# J  Y( ?! u# \, j" c! \5         6        2018-01-01    500: w7 j/ E2 V1 }6 C5 Y) m/ o
6         5        2018-12-12    480' B2 }2 m) x5 g6 i
ppl:
$ e' E( t7 m7 N6 n( Did_perc   name
" {( r) ~- Q0 u, S" K- B# _3 E# Z$ p1         John# W# o2 j  [; ^2 A- t
2         Derek
: ]: o/ _/ I. ^5 d  d% i) y3          Mia
! Q2 x( z& o( Z) p* D# T7 y4         Chris/ j4 H# i( K. D, ?. K
5          Ann" M9 V" u" A3 u6 m! P" H( f( E
6         Dave
7 O3 M; Q1 j4 Q然后我需要得到这样的表:
5 @5 O( N! j2 K$ X+ M           name0 Q. N/ F3 r3 I
id_numb   value
+ A- g0 i* I. X: }* w& h; ?4 X" q对于这些表,应在必要时查找日期为2018/12/12的ppl的所有值:% Y5 X. \. O# l1 T
     Derek    Ann6 Z1 j2 ?, `8 B- k
2     250      0
- @- c2 O2 _9 q  C6      0     NULL
/ D2 X$ O0 n8 p- Q1 ~- S+ I代码:
, e5 ]7 N6 T, u& l2 pCREATE TABLE ppl(, F+ y" Y1 \5 p8 m+ m, [
    id_perc smallint PRIMARY KEY,% J, M8 v+ ]( A, v. j4 K! }3 q& j
    name varchar(50) NOT NULL
3 r, Y! \  d8 i)
, [% \7 n8 F0 T3 \& LCREATE TABLE prop_ppl(
7 j" j2 U& Z0 T- p8 ?    id_numb int IDENTITY(1,1) PRIMARY KEY,
7 z& b; m  x- _3 q# Y    id_perc smallint NOT NULL,4 A' R5 W( |; F6 G
    cdate smalldatetime,
; `( R: y  G* Y: u    val int! H/ Z( X9 U4 g( d! g# n6 y
    )- K% Y' T( v& w4 K! V$ `: T9 |  C
INSERT INTO dbo.ppl (id_perc, name)
/ \  c/ ~6 o' W- H1 d1 y; G6 AVALUES (1, 'John'), (2, 'Derek'), (3, 'Mia'), (4, 'Chris'), (5, 'Ann'),
! y: C; D0 U; X2 L        (6, 'Dave')7 ]+ i! x# W! E. b- [( D
INSERT INTO dbo.prop_ppl (id_perc, cdate, val)
# D8 T3 I  R( z' U7 j/ t+ \VALUES (4, NULL,NULL), (2,'20181212', 250), (1, '20181201', 250),& B" r: B  |0 ^9 e" p5 J* j" X0 l
    (3, '20181211',500), (6,'20180101', 500), (5, '20181212', 480)" X' c2 L$ D3 z: ?) J. |( X% D: b
然后我尝试使用:" o+ L# ]) r. I( x
SELECT *
, [: |$ [) U/ t- ~% e# uFROM (  & I3 `; ^, {5 \2 X+ q
    SELECT name,id_numb,val     ) Y( p. B! D5 R
    FROM prop_ppl
5 O. G$ R' Q' E    JOIN ppl ON prop_ppl.id_perc = ppl.id_perc$ I8 p7 n/ K  H
    WHERE cdate='20181212', Y8 X- n! U. n% G5 G& c
    )
2 d8 W, `4 s' O" Q! LPIVOT(. N! n, p1 b0 q1 k$ E+ c
    SUM(val) ) u2 V8 R$ v! Q0 i6 y- T
    FOR [name] in ('Derek','Ann')4 U$ l" A! L3 b6 E. C( A9 c9 o
      )
2 z8 E' Q. x  G, n/ S& R但出现错误“ 关键字“ PIVOT”附近的语法不正确。$ G# \  q' Q& ]
也许,也可以不使用PIVOT。。另外,我想了解如何将此脚本应用于任意参数(而不仅仅是Derek和Ann)。; t& k' f0 X. u% [/ n) D( ?
                9 H/ }0 G6 y$ p; H0 R) p
解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则