回答

收藏

具有不确定数量的不同值的数据透视

技术问答 技术问答 321 人阅读 | 0 人回复 | 2023-09-14

我写了这个查询:) N& G4 m4 }/ v$ g- J
SELECT s, [1] AS a1, [2] AS a2, [3] AS a3, [4] AS a4$ @7 o$ {; v/ y' ~/ V' d  J6 k
FROM (SELECT grade, aid, s FROM m) p/ p; t& Z4 b0 J! [2 n6 e9 v
PIVOT
8 i6 @1 i; r' v) o% b0 `: `# U* D(
6 S0 z: ]  v* m9 Z8 |SUM(grade)) Y) Z  `8 Z1 h: k- N7 `. f& \
FOR aid IN ([1], [2], [3], [4])
( S1 n6 O: h, ?) AS pvt ORDER BY pvt.s;7 `% e% Z( j6 D. s4 t+ r& x' n
返回结果:: w# U# m  ]( c; [: Z
s  a1  a2  a3  a4
! t0 }& K$ v2 G- e1  25  69  95  56* h! \/ U" [6 _" m- \; ~. D
2  27  99  16  87$ Q5 l" O0 U% k9 E# G! C
. . . .
( f% W* ?& s# S$ G& J, S0 }99 98  12  34  765 H2 F4 h! o; G. A5 b7 X
这正是我想要的结果。我的问题是,“援助”中不会总是有四个不同的值。是否可以重写此查询(或使用存储过程),以使“ a9 ^4 ]1 H+ p1 m+ O; t- y
*”列的数量取决于“援助”中有多少个不同的值?) ~/ @$ J' y7 O/ F& C' V5 d$ d, p+ j
               
& X3 v8 W; I+ c* D+ k" E. r& J解决方案:
. d% S! Z) ?4 L7 e6 X                $ Q2 \& j( _5 ^" T8 T
+ C( a7 O4 S8 A0 m, m0 T
0 H2 u5 j& E( q( d. _9 l( [
                您将需要使用“动态数据透视表”来获取所需的列列表。这将首先检索列的列表,然后旋转该列表。类似于以下内容:
! j- s) ]5 ~- h; M3 C$ e) h7 k6 HDECLARE @cols AS NVARCHAR(MAX),& t3 Q; B3 B) z, w& Y" b
    @query  AS NVARCHAR(MAX);& c; j% V) P& E3 L  G# ^  R% _* D
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(aid)
- d5 s8 H. ^- d8 N2 W, M- ~, G            FROM m
. T* B7 i% \* u) O            FOR XML PATH(''), TYPE  R" F0 ^% W0 Q) {
            ).value('.', 'NVARCHAR(MAX)')
# j* E* s1 a! J- e0 @) O        ,1,1,'')
- `0 W- I8 a9 ~) O5 U& Fset @query = 'SELECT s, ' + @cols + ' from / e+ W; x" ]- f+ X
            (
6 [7 Q  H4 @* u5 B! ^                select grade, aid, s8 a, f$ T" e/ _$ e3 S& w5 p/ g
                from m
/ |. M9 s& N5 N! P0 ?           ) x+ H1 E, U# k1 Y4 F# h
            pivot ) y( u: C" p: N' N2 m* s3 i
            (
/ _" U; P5 t/ r+ {$ C                sum(grade)0 f* A6 T1 A" h; X- {: p
                for aid in (' + @cols + ')
" T- m4 m$ P6 T0 q, m: g            ) p " P" }8 Z6 u$ F
            ORDER BY p.s': ]  @! a+ K& D/ X" v2 ~7 J% a
execute(@query)
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则