回答

收藏

SQL Server行到列

技术问答 技术问答 196 人阅读 | 0 人回复 | 2023-09-12

我的查询是:
$ d. |2 k4 D+ n! X9 L+ p8 ySELECT vendor.id,insurances.id AS ins_id,vendor_insurances.expiry_dateFROM vendorINNER JOIN vendor_insurancesON vendor.id=vendor_insurances.vendor_id和输出:# w1 y( N$ `( j* K- }- f4 F( M: h" m
id    ins_id    expiry_date================================28             20066006-01-0128   11       20088008-01-01我想将其转换为:
8 p1 f; q7 B  w; C& m- Vid     11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111         ======================================28    2006-01-01   2008-01-01谢谢,
0 y  x; a/ H2 u- u+ ]! P; D                                                               
0 `. @- M/ F2 y( o    解决方案:                                                               
$ c- c9 A8 B! ]3 l3 _                                                                您将需要使用它PIVOT并执行以下操作:& d) K- J0 f. H& i- U1 L: e: j
静态数据透视-只需透视几列! K2 R" G5 W1 K: Q9 j
select *from (  SELECT v.id    ,vi.id AS ins_id    ,vi.expiry_date  FROM vendor v  INNER JOIN vendor_insurances vi    ON v.id=vi.vendorId) xPIVOT(   MIN(expiry_date)    FOR ins_id IN ([1],[11])) p请参见相关工作演示SQL小提琴
) v2 N: J2 P( e; M* u1 I4 V或者,如果你有很多要发送的东西PIVOT动态数据透视表可用于项目:
( [9 L' k" f8 ]& c3 o& CDECLARE @cols AS NVARCHAR(MAX),   @query  AS NVARCHAR(MAX);select @cols = STUFF((SELECT distinct ,   QUOTENAME(vi.id)                   FROM vendor v                  INNER JOIN vendor_insurances vi                    ON v.id=vi.vendorId            FOR XML PATH(''),TYPE          ).value('.','NVARCHAR(MAX)1、1、1、1、')set @query = 'SELECT id,'   @cols   ' from            SELECT v.id        vi.id AS ins_id        vi.expiry_date                FROM vendor v                INNER JOIN vendor_insurances vi                    ON v.id=vi.vendorId         x            pivot            MIN(expiry_date)                for ins_id in  @cols   ')         p 'execute(@query)两者都会给你同样的结果。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则