Sql 将多列转换为一列

Sql 将多列转换为一列,sql,sql-server,Sql,Sql Server,我有一个具有以下结构和数据的表: **Area | 01-Apr-17 | 02-Apr-17 | 03-Apr-17** Field_A | 76 | 174 | 123 Field_B | 67 | 414 | 35 我需要这样的桌子: Area | Date | Alarm Field_A | 01-Apr-17 | 76 Field_A | 02-A

我有一个具有以下结构和数据的表:

**Area  |  01-Apr-17  |  02-Apr-17  |  03-Apr-17**
Field_A |     76      |    174      |     123
Field_B |     67      |    414      |     35
我需要这样的桌子:

Area     |    Date      |  Alarm
Field_A  | 01-Apr-17    |    76
Field_A  | 02-Apr-17    |   174
Field_A  | 03-Apr-17    |   123
Field_B  | 01-Apr-17    |    67
Field_B  | 02-Apr-17    |   414
Field_B  | 03-Apr-17    |   358
我试图从下面的链接中采用pivot函数,但无法获取链接到日期列的报警数据:

谢谢你的帮助,
S

使用SQL Server的
PIVOT
是一种选择,但我们也可以使用一系列联合来处理此问题:

SELECT Area, '01-Apr-17' AS Date, [01-Apr-17] AS Alarm
FROM yourTable
UNION ALL
SELECT Area, '02-Apr-17', [02-Apr-17]
FROM yourTable
UNION ALL
SELECT Area, '03-Apr-17', [03-Apr-17]
FROM yourTable
ORDER BY Area, Date;

请检查此查询:

SELECT
  Area,
  Date,
  Alarm
FROM yourtable
UNPIVOT
(
Alarm
FOR [Date] IN ([01-Apr-17], [02-Apr-17], [03-Apr-17])
) AS P

谢谢Tim,用pivot可以吗?谢天谢地,它不会工作,因为我需要从原始数据生成区域、日期和报警列。