SQL PIVOT只有一列

时间:2014-07-03 07:39:46

标签: sql sql-server pivot

所以我有这个"表"这是查询的结果

SELECT  Valoare 
FROM GEConfig 
WHERE  Cimp IN('Societate','Adresa','Banca','CapitalSocial','Cont','CUI','NrRegCom','ModulReceptiiExtCotaTVA')

GeConfig是一个用于配置每个客户端的应用程序的表,因此上述查询产生的数据对于eaech客户端来说会有所不同。

    Valoare
========================
1   aaa
2   bbb
3   ccc
4   ddd
5   eee
6   fff
7   ggg
8   hhh

我想调整此表,使其看起来像

  col1  col2  col3  col4  col5  col6  col7  col8
   aaa   bbb   ccc   ddd   eee   fff   ggg   hhh

我没有任何聚合,我只有一个包含8行的列,我想用1列8列。

为什么我要这个?我必须使用Rave Report。 我试过这样的事情

select Valoare
  , [1] 
  , [2]
  , [3]
from
(
  select   Valoare from GEConfig 
) x
pivot
(
  max(Valoare)
  for Valoare in([1], [2], [3])
)p

但很明显这是非常错误的,因为我不知道如何使用PIVOT。

3 个答案:

答案 0 :(得分:2)

更通用的方法是添加行号并将其用作锚

WITH _ID AS (
  SELECT Valoare
       , _ID = Row_Number() OVER (ORDER BY Valoare)
  FROM   GEConfig
)
SELECT [1] = MAX(CASE WHEN _ID = 1 THEN Valoare ELSE NULL END)
     , [2] = MAX(CASE WHEN _ID = 2 THEN Valoare ELSE NULL END)
     , [3] = MAX(CASE WHEN _ID = 3 THEN Valoare ELSE NULL END)
     , [4] = MAX(CASE WHEN _ID = 4 THEN Valoare ELSE NULL END)
     , [5] = MAX(CASE WHEN _ID = 5 THEN Valoare ELSE NULL END)
     , [6] = MAX(CASE WHEN _ID = 6 THEN Valoare ELSE NULL END)
     , [7] = MAX(CASE WHEN _ID = 7 THEN Valoare ELSE NULL END)
     , [8] = MAX(CASE WHEN _ID = 8 THEN Valoare ELSE NULL END)
FROM   _ID

静态案例

您可以使用MarkD的答案中的真实PIVOT,或者您可以使用假的

SELECT [1] = MAX(CASE WHEN Valoare = 'aaa' THEN 'aaa' ELSE NULL END)
     , [2] = MAX(CASE WHEN Valoare = 'bbb' THEN 'bbb' ELSE NULL END)
     , [3] = MAX(CASE WHEN Valoare = 'ccc' THEN 'ccc' ELSE NULL END)
     , [4] = MAX(CASE WHEN Valoare = 'ccc' THEN 'ccc' ELSE NULL END)
     , [5] = MAX(CASE WHEN Valoare = 'ddd' THEN 'ddd' ELSE NULL END)
     , [6] = MAX(CASE WHEN Valoare = 'eee' THEN 'eee' ELSE NULL END)
     , [7] = MAX(CASE WHEN Valoare = 'fff' THEN 'fff' ELSE NULL END)
     , [8] = MAX(CASE WHEN Valoare = 'ggg' THEN 'ggg' ELSE NULL END)
FROM   GEConfig

答案 1 :(得分:0)

尝试一下:

SELECT * from
  (SELECT cast([name] AS nvarchar(MAX)) [name], row_number() over(
                                                                  ORDER BY name) AS id
   FROM TEMP)a pivot ( max([name])
                      FOR id IN ([1], [2], [3], [4], [5]) )pvt

答案 2 :(得分:-1)

您可以使用COALESCE

完成此操作
declare @val varchar(max)

select @val = coalesce(@val, '') + ' ' + Valoare from GEConfig

select @val