我有一个表像下面:合并多行到一行在SQL
ID TYPE VALUE
1 CC 1 X
1 CC 2 Y
1 CC 3 NULL
1 CC 4 NULL
我使用SQL PIVOT和东西的功能得到期望的结果,但仍然没能做到这一点。请任何人都可以帮助我。
所需的结果:
ID [CC 1] [CC 2] [CC 3] [CC 4]
1 X Y NULL NULL
我有一个表像下面:合并多行到一行在SQL
ID TYPE VALUE
1 CC 1 X
1 CC 2 Y
1 CC 3 NULL
1 CC 4 NULL
我使用SQL PIVOT和东西的功能得到期望的结果,但仍然没能做到这一点。请任何人都可以帮助我。
所需的结果:
ID [CC 1] [CC 2] [CC 3] [CC 4]
1 X Y NULL NULL
FULL OUTER JOIN
的:
select coalesce(t1.id, t2.id, t3.id, t4.id),
t1.value as cc1,
t2.value as cc2,
t3.value as cc3,
t4.value as cc4
from (select id, value from tablename where type = 'CC 1') as t1
full outer join (select id, value from tablename
where type = 'CC 2') as t2 ON t1.id = t2.id
full outer join (select id, value from tablename
where type = 'CC 3') as t3 ON t2.id = t3.id
full outer join (select id, value from tablename
where type = 'CC 4') as t ON t3.id = t4.id
您可以通过多种方式接近这一点。我通常使用条件聚集:
select id,
max(case when type = 'CC 1' then value end) as cc1,
max(case when type = 'CC 2' then value end) as cc2,
max(case when type = 'CC 3' then value end) as cc3,
max(case when type = 'CC 4' then value end) as cc4
from <table t>
group by id;
我们可以使用东西还是透视这个..换句话说,我希望使用东西或透视。所以请如果你能帮助我.. – vivek
@vivek。 。 。我使用条件聚合的原因是(1)它适用于所有数据库,并且(2)由于表中的其他列而产生意外结果。我不知道为什么这个查询需要'stuff()'。 –
尝试以下操作:
Select id, listagg(value, '-') within group(order by type) over (partition by id) as txt
From table group by Id, txt
这里是支点的语法;
SELECT ID, [CC 1],[CC 2],[CC 3],[CC 4]
FROM yourtable
PIVOT
(min([value])
FOR Type
in([CC 1],[CC 2],[CC 3],[CC 4])
)AS p
“type”值是否修复? –
http://stackoverflow.com/questions/24470/sql-server-pivot-examples –
@juergend可能是..但这些是在一个特定的Id循环。假设对于Id 1,这些都是13,然后是2等等。 – vivek