使用数据透视表将 SQL 服务器中的行转换为列
Convert Rows to Column in SQL Server using Pivot
我是 pivot 的新手,我有一个如下所示的 table。它有型号和组别详细信息。 table 包含 10 个不同的组。
我正在努力实现这样的结果集。只想列出每个组下的所有模型。
我尝试使用这个 SQL 查询,但在这里我得到了部分结果。它只显示一行。
SELECT *
FROM (
SELECT DISTINCT ModelNo
,GroupNo
FROM #Table
) d
pivot(max(ModelNo) FOR GroupNo IN (
[1]
,[2]
,[3]
,[4]
,[5]
,[6]
,[7]
,[8]
,[9]
,[10]
)) piv
我不确定我错过了哪里。请帮我整理一下。
我推荐条件聚合而不是 pivot
-- 它更加通用。
您需要的是 row_number()
,因此查询如下所示:
select max(case when groupno = 1 then modelno end) as group_01,
max(case when groupno = 2 then modelno end) as group_02,
. . .
from (select t.*,
row_number() over (partition by groupno order by modelno) as seqnum
from t
) t
group by seqnum;
您也可以将这个想法融入到 pivot
中。
我是 pivot 的新手,我有一个如下所示的 table。它有型号和组别详细信息。 table 包含 10 个不同的组。
我正在努力实现这样的结果集。只想列出每个组下的所有模型。
我尝试使用这个 SQL 查询,但在这里我得到了部分结果。它只显示一行。
SELECT *
FROM (
SELECT DISTINCT ModelNo
,GroupNo
FROM #Table
) d
pivot(max(ModelNo) FOR GroupNo IN (
[1]
,[2]
,[3]
,[4]
,[5]
,[6]
,[7]
,[8]
,[9]
,[10]
)) piv
我不确定我错过了哪里。请帮我整理一下。
我推荐条件聚合而不是 pivot
-- 它更加通用。
您需要的是 row_number()
,因此查询如下所示:
select max(case when groupno = 1 then modelno end) as group_01,
max(case when groupno = 2 then modelno end) as group_02,
. . .
from (select t.*,
row_number() over (partition by groupno order by modelno) as seqnum
from t
) t
group by seqnum;
您也可以将这个想法融入到 pivot
中。