|
我问了这个问题,它被标记为如何?SQL5 s4 V7 B# V; [' B: D* v% n5 o
Server中透视未知列数没有聚合?重复项。,但答案对我没有帮助。) P/ M8 |7 i c3 F
我有一个看起来像这样的数据表,包括未知数量的行和值。
1 x( `% M$ L; [7 j6 O/ O9 \RecID Name Value1 Color Red2 Size Small3 3 Weight 20lbs4 Shape Square我需要一个查询,它将返回这些数据,并为每个行建立一个列。除了列出标题的名称和值外,我不能进行任何硬编码。
( z$ j3 a% f' J$ mColor Size Weight ShapeRed Small 20lbs Square到目前为止,这是我目前可以部分工作的内容:
! P/ L( v$ v+ k. p" y- yINSERT INTO @Table VALUES(1,'Color' ,'Red(二),Size' ,'Small(3),Weight','20lbs(四,Shape' ,'Square') ;with mycte as (SELECT rn,cols,valFROM (SELECT row_number() over(order by Name) rn,Name,Value FROM @Table) AS src1UNPIVOT (val FOR colsIN ( [Name],[Value])) AS unpvt )SELECT *FROM (SELECT rn,cols,val FROM mycte) AS src2 PIVOT( Max(val) FOR rn IN (1)AS pvt哪个返回:
" D0 j4 ^: V2 D0 _cols 1 2 33 Name Color Shape SizeValue Red Square Small两个我似乎解决不了的问题。8 W6 h+ q1 v# ]! Y
[ol]我不需要列出标题和第一列cols,Name,Value的列。
_3 G2 X3 v+ Y在不指定[x]在标识符的情况下,无法找出如何为每一行建立一列。[/ol]任何指导都会很棒,我坚持了一段时间。( @' e5 [& G8 g8 G' p( i
1 N1 p/ D8 b# {. n
解决方案: l' Y6 n$ Q& z. C% g- s! z3 o5 j
declare @collist nvarchar(max)
( G2 y+ g. c: G1 [) u SET @collist = stuff((select distinct ‘,’ QUOTENAME(name)
( e% l4 k: [- J% v7 h$ `" @ FROM #t – your table here1 l- z# h. @) s. @8 C1 T4 o2 w4 ` h
FOR XML PATH(‘’),TYPE6 g3 d& n, p) [! F! f) H
.value(‘.’,‘NVARCHAR(MAX)’)
7 `4 h$ d4 I5 N: r- P& u' ^ ,1,1,’‘)
! O9 X c/ Z+ _+ N/ Ldeclare @q nvarchar(max)set @q = 'select * from select rn,name,Value from select *,row_number() over (partition by name order by RecID desc) as rn from #t -- your table here ) as x) as sourcepivot max(Value) for name in (' @collist ) as pvt'exec (@q) |
|