回答

收藏

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

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

我正在使用两个表在SQL Server(SSMS)中工作:
8 j. }) w! i' `+ m- Aprop_ppl:$ Y: V! O8 [! ~6 e7 [) Q$ a
id_numb  id_pers       cdate       val
7 }: d+ X$ X" ]6 ]1         4            NULL      NULL# \; ^3 d3 I; D! J
2         2        2018-12-12    250
* P! |. N) C/ U# }5 d3         1        2018-12-01    250
9 H& Q% r: d& \0 q. s1 v4         3        2018-12-11    500$ T$ |- B* p/ [1 ?, x
5         6        2018-01-01    500- {% M* q4 }3 J2 S
6         5        2018-12-12    480+ H& R# O2 w, M
ppl:5 k% Z0 c* [4 j8 ~) M/ m1 c# a5 i
id_perc   name
1 [( t, f' J% ?; M* {+ v, d0 w( ^) s) r1         John5 ~3 B2 i' u! Q
2         Derek
' o3 V4 I& j  }3          Mia: ?6 K- }6 n1 C+ c1 ?3 K
4         Chris1 Q  n: ?/ i8 t1 F, O- G# \
5          Ann/ ?- G; |: P& ?
6         Dave0 a& `# Q5 }9 D5 t
然后我需要得到这样的表:" G2 z( ?/ S" |; o+ y, l1 d
           name, c+ ?7 g* P$ B
id_numb   value( |& T" X$ m1 a6 z% d
对于这些表,应在必要时查找日期为2018/12/12的ppl的所有值:1 |) h+ _" j) m1 \  w9 S& h# }
     Derek    Ann
, Z# Y7 w( R, e, x2     250      02 F) X0 ^+ b6 D6 A; o5 j$ W0 y- B4 {' S
6      0     NULL
: f& U2 s& K/ B+ {9 Z" j# u代码:1 B- |, V' f& ?5 x; C0 r: W+ x
CREATE TABLE ppl(8 K( N6 X2 ?5 Q/ ~: H7 G% T% V! R
    id_perc smallint PRIMARY KEY,: b) M! h( b/ S2 t
    name varchar(50) NOT NULL* y5 i6 F- [& ?5 A. |3 m. \; G
)
+ ~4 h$ Z, `+ m6 O- ]* xCREATE TABLE prop_ppl(
% `. j0 X7 ?7 U$ Z' y. ^  u    id_numb int IDENTITY(1,1) PRIMARY KEY,
/ ~7 J1 j$ o4 r% H% H7 W    id_perc smallint NOT NULL,* ?7 F0 e' |& V1 Q  z( m/ o. j9 A  e
    cdate smalldatetime,* U6 H* c, T( c1 G
    val int/ O8 i8 N1 x0 U2 w# Y
    )
# _; T- ]( o  O, ^, P" E- X# X2 uINSERT INTO dbo.ppl (id_perc, name)% ~4 C3 `* a( ^! v' f+ x: x
VALUES (1, 'John'), (2, 'Derek'), (3, 'Mia'), (4, 'Chris'), (5, 'Ann'), / [9 P& H+ d2 D* ]( O& H. p1 u
        (6, 'Dave')' I1 S' W0 e2 i/ E; r" T/ H9 P" Y
INSERT INTO dbo.prop_ppl (id_perc, cdate, val)
0 y& e5 v1 t. wVALUES (4, NULL,NULL), (2,'20181212', 250), (1, '20181201', 250),; m* ~2 L! E$ C$ R8 ^! a/ @
    (3, '20181211',500), (6,'20180101', 500), (5, '20181212', 480)
& [; ^; w7 ~8 C+ t: P, ^  F然后我尝试使用:* X( g& P- k' ~) A; I
SELECT *
0 F: C' l0 w5 F% K6 F% H7 GFROM (  
- d; J8 W7 n( ]    SELECT name,id_numb,val     
* r/ _# z7 F/ b; Y" h    FROM prop_ppl , j; B( P4 ~; W6 O
    JOIN ppl ON prop_ppl.id_perc = ppl.id_perc! o! T0 i( m2 l, w; Y$ E
    WHERE cdate='20181212'
! `: N4 n+ U4 Y) n* Z    )+ b$ n- H- @( z2 E/ A
PIVOT(0 a: _% h+ y: L
    SUM(val)
. n* c5 o6 \* L& ]0 ?/ Q    FOR [name] in ('Derek','Ann')6 s$ `8 K' A1 ]& M2 k
      )
' g1 b. T2 S! `; i4 |4 k5 |4 ]/ k8 d  M但出现错误“ 关键字“ PIVOT”附近的语法不正确。* Z1 t6 q2 m( f+ Z9 G
也许,也可以不使用PIVOT。。另外,我想了解如何将此脚本应用于任意参数(而不仅仅是Derek和Ann)。; _0 S4 ?1 c' [9 p
               
) U& ?1 _& x& c6 J: `: U* W解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则