SQL-将多行转换为多列
这里需要一个简单的帮助。已经尝试过各种解决方案,如用例和行号、pivot,但无法找到合适的解决方案 基本上,我希望使用组名称值,查找所有非空和不同的值,并在一行中显示结果 输入SQL-将多行转换为多列,sql,sql-server,Sql,Sql Server,这里需要一个简单的帮助。已经尝试过各种解决方案,如用例和行号、pivot,但无法找到合适的解决方案 基本上,我希望使用组名称值,查找所有非空和不同的值,并在一行中显示结果 输入 Name | Color John | Blue John | Green Mary | NULL Mary | Yellow Mary | Pink Mary | Pink 预期产量 Name | Color1 | Color2 | Color3 John | Blue | Green | NULL Mary
Name | Color
John | Blue
John | Green
Mary | NULL
Mary | Yellow
Mary | Pink
Mary | Pink
预期产量
Name | Color1 | Color2 | Color3
John | Blue | Green | NULL
Mary | Yellow | Pink | NULL
目前,我已经提出了下面的问题,但看起来仍然离我期望的结果相去甚远。感谢您的帮助,谢谢
select Name,
max(case when seqnum = 1 then Color end) as Color1,
max(case when seqnum = 2 then Color end) as Color2,
max(case when seqnum = 3 then Color end) as Color3
from (select table.*, row_number() over (partition by Name order by Name) as seqnum
from table
) table
group by Name
我认为您应该在这里使用
densite\u RANK
,而不是ROW\u NUMBER
:
SELECT
Name,
MAX(CASE WHEN rnk = 1 THEN Color END) AS Color1,
MAX(CASE WHEN rnk = 2 THEN Color END) AS Color2,
MAX(CASE WHEN rnk = 3 THEN Color END) AS Color3
FROM
(
SELECT *, DENSE_RANK() OVER (PARTITION BY Name
ORDER BY CASE WHEN Color IS NOT NULL THEN 0 ELSE 1 END, Color) rnk
FROM yourTable
) t
GROUP BY
Name;
目前还不完全清楚您实际希望对颜色使用什么顺序,因为在您预期的输出中,John的颜色在上升,而Mary的颜色在下降。我选择了升序,最后是
NULL
s。我认为您应该在这里使用densite\u RANK
,而不是行数
:
SELECT
Name,
MAX(CASE WHEN rnk = 1 THEN Color END) AS Color1,
MAX(CASE WHEN rnk = 2 THEN Color END) AS Color2,
MAX(CASE WHEN rnk = 3 THEN Color END) AS Color3
FROM
(
SELECT *, DENSE_RANK() OVER (PARTITION BY Name
ORDER BY CASE WHEN Color IS NOT NULL THEN 0 ELSE 1 END, Color) rnk
FROM yourTable
) t
GROUP BY
Name;
目前还不完全清楚您实际希望对颜色使用什么顺序,因为在您预期的输出中,John的颜色在上升,而Mary的颜色在下降。我选择了升序,最后是
NULL
s。您可以得到json格式的结果,如示例中所示:
SELECT concat(
'{',
name,
':[',
GROUP_CONCAT(color),
']}'
) FROM `test` GROUP BY name
结果:
{
John: [Blue, Green]
}
{
Mary: [NULL, Yellow, Pink, Pink]
}
您可以获得json格式的结果,如示例中所示:
SELECT concat(
'{',
name,
':[',
GROUP_CONCAT(color),
']}'
) FROM `test` GROUP BY name
结果:
{
John: [Blue, Green]
}
{
Mary: [NULL, Yellow, Pink, Pink]
}
谢谢。我现在有点理解这个概念了。问题是因为该表与多个表联接,目前正在研究如何包含join语句STHANKS。我现在有点理解这个概念了。问题是因为该表与多个表联接,目前正在研究如何包含联接语句您使用的是哪种dbms?使用SQL Server您使用的是哪种dbms?使用SQL Server显然OP使用的是SQL Server。这还能用吗?显然OP使用的是SQL Server。这还能用吗?