回答

收藏

SQL查询; 水平到垂直

技术问答 技术问答 229 人阅读 | 0 人回复 | 2023-09-13

我陷入了涉及将水平行转换为垂直行的SQL查询(SQL Server)% S1 ?$ Q+ k+ U) y6 W
以下是我的数据- |$ [+ ~! e+ h
No      Flag_1    Flag_2    Flag_3
; a0 l( h7 v# ~3 q, R7 [$ C---      ----      -----     -----
& b/ g6 K: z) e) I) c8 vA         1         2         3' d* j5 T8 L: J9 C0 R) I, [! s
B         4         1         6: `8 s( m& ?4 N. q9 J
转换后,该表应为
# [% h' ~, |/ G8 H3 I; DNo     FlagsName    Flag_value- |6 j# q" r" H. m# \% I$ r
--      ----        ----------! l0 _  ], x: C) i
A        Flag_1        1. b& k: D1 A! R. [
A        Flag_2        2  " r, y4 j9 ~% o3 U! o) E, v( e
A        Flag_3        39 B' F- ~' A1 G! V' x' V; d
B        Flag_1        4
+ W) h. F; S! \9 ~' u6 MB        Flag_2        1
9 ]7 E  i" l' S2 F9 x% NB        Flag_3        6( r8 n+ K& N+ r( f0 Z2 G  G- t
关于此的任何输入将有所帮助?
4 W+ \4 ?( e4 v) p, c1 _; B我正在尝试ROW_NUMBER在分区上玩耍。但是它以某种方式不起作用!!!
  j4 j' r0 `4 w谢谢 !!!1 o- \  V+ R2 ^7 ^) X
               
" b  M9 [% K# S3 Q8 k4 S$ C, g/ f解决方案:: V8 O+ }3 i2 D3 y; o5 H' L
                ) ~9 i$ e8 V) I$ u) a% C  U

- N" F! K9 }3 ^; G9 h4 d6 _/ x  H7 _/ a# V
                您可以使用UNION ALL:
3 Q. E- k0 J" W* {select No, 'Flag_1' as FlagName, Flag_1 as Flag_Value2 d% j, I& U$ b& F$ S1 K
from yourtable
8 y% v: d: K, n: zunion all
1 [/ x8 x8 k4 e: g9 u2 Bselect No, 'Flag_2' as FlagName, Flag_2 as Flag_Value
8 G+ W9 j7 f7 j. efrom yourtable
5 Q+ v& s. V7 K& D. G% `union all
  u4 H8 Q( C! k9 Y6 i- Uselect No, 'Flag_3' as FlagName, Flag_3 as Flag_Value; a. t; F% I: A
from yourtable' n2 d' T4 D, k: H( w2 c
或UNPIVOT:/ k( l" |* |/ F" d& W
select no, FlagsName, flag_value: U7 o$ h. q0 I: o- e
from yourtable; ~, ]3 T$ n+ S1 \8 [- r
unpivot
% @8 B4 Q9 M  n  m* l3 R; y  Z0 n(
  |; t* u7 G8 M0 L    flag_value! V$ \0 [( I7 b$ J/ c4 p
    for FlagsName in (Flag_1, Flag_2, Flag_3)
9 N# H# C% D! Z4 M) u& \# A- e* |: ~3 H" \
请参见带有演示的SQL Fiddle
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则