Ciu*_*caS 4 sql sql-server pivot
所以我有这个“表”,它是查询的结果
SELECT Valoare
FROM GEConfig
WHERE Cimp IN('Societate','Adresa','Banca','CapitalSocial','Cont','CUI','NrRegCom','ModulReceptiiExtCotaTVA')
Run Code Online (Sandbox Code Playgroud)
GeConfig 是一个表,用于配置每个客户端的应用程序,因此上述查询生成的数据对于每个客户端来说都是不同的。
Valoare
========================
1 aaa
2 bbb
3 ccc
4 ddd
5 eee
6 fff
7 ggg
8 hhh
Run Code Online (Sandbox Code Playgroud)
我想旋转这张桌子,使它看起来像
col1 col2 col3 col4 col5 col6 col7 col8
aaa bbb ccc ddd eee fff ggg hhh
Run Code Online (Sandbox Code Playgroud)
我没有任何聚合,我只有一列 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
Run Code Online (Sandbox Code Playgroud)
但很明显这是非常错误的,因为我不知道如何使用 PIVOT。
更通用的方法是添加行号并将其用作锚点
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
Run Code Online (Sandbox Code Playgroud)
静态案例
您可以使用PIVOTMarkD 的答案中的真实值,也可以使用假值
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
Run Code Online (Sandbox Code Playgroud)