来自 sql table 的复杂逆轴

Complex unpivot from sql table

我得到了一个包含各种栏目的 table。 让我们这样说:

姓名 |型号 |第一年 |第 1 组 |第二年 |第 2 组 |第三年 |第 3 组 |四年级 |第 4 组

名称和型号中的所有行都有数据。

所有行都得到了 year1 和 group1 的数据,

有些行得到了year1 group1和year2 group2的数据,

有些行在year1 group 1和year2 group2和year3 group3中得到数据,

等...

不可能在较高数字组中有数据而没有较低数字组中的值。 示例:如果没有 2 和 1 中的数据,则不能在 year3 group3 中有数据。

我的问题如下,

我需要将所有这些值逆透视到单独的行中。 这样最终的结果将是这样的:

姓名 |型号 |年份 |组

P.S。 例如,如果 year4 group4 列中没有值,则它们被定义为 NULL。

我使用的是 MSSQL 服务器 2016。

你可以用这个

SELECT name, model, year1 AS [year], 'group1' AS [group]
FROM table_name
WHERE group1 IS NOT NULL
UNION ALL
SELECT name, model, year2, 'group2'
FROM table_name
WHERE group2 IS NOT NULL
UNION ALL
SELECT name, model, year3, 'group3'
FROM table_name
WHERE group3 IS NOT NULL
UNION ALL
SELECT name, model, year4, 'group4'
FROM table_name
WHERE group4 IS NOT NULL;

您可以考虑在所有 4 个 SELECT 语句中为每个组的值添加一列:groupx AS value

SELECT name, model, year1 AS [year], group1 AS value, 'group1' AS [group]
FROM table_name
WHERE group1 IS NOT NULL
UNION ALL
SELECT name, model, year2, group2, 'group2'
FROM table_name
WHERE group2 IS NOT NULL
UNION ALL
SELECT name, model, year3, group3, 'group3'
FROM table_name
WHERE group3 IS NOT NULL
UNION ALL
SELECT name, model, year4, group4, 'group4'
FROM table_name
WHERE group4 IS NOT NULL;