将多行转换为列

时间:2014-08-27 12:03:38

标签: sql sql-server rows multiple-columns

我有一个来自我的脚本SQL的表格,例如:

enter image description here

我需要将此表转换为:

enter image description here

我创建临时表:

CREATE TABLE #Table
(
  Data Date,
  Max Real,
  Min Real,
  Avg Real
)

我有一个脚本,当计算我的值时,下一个:

INSERT INTO #Table (Data, Max, Min, Avg) VALUES (@Data, @Max, @Min, @Avg)

我不知道如何将table1转换为table2

2 个答案:

答案 0 :(得分:0)

这称为“转置”数据。

在某些数据库中,PIVOT命令可用于此目的。当它不存在时,例如在MySQL中,可以使用GROUP BY和有时纠结的SQL来完成,如下例所示:

然而,导入脚本中的转置通常要简单得多。

任一选项的关键要求是您的转置表需要固定数量的列;在您提供的示例中,情况并非如此。

另一种可能更适合的方法是将数据保留在数据库中,稍后在使用/查看数据的应用程序中进行转置。

答案 1 :(得分:0)

我很想看到这个问题的更多答案就是我的版本

SELECT 'Data' AS [Data],* FROM (
SELECT DATA FROM #TABLE)A
PIVOT
(
MAX(DATA ) FOR DATA IN ([08:01],[08:02],[08:03],[08:04])
)B
UNION ALL
SELECT 'MAX',CONVERT(VARCHAR,[26]),CONVERT(VARCHAR,[27]),CONVERT(VARCHAR,        [28]),CONVERT(VARCHAR,[29]) FROM (
SELECT [MAX] FROM #TABLE)A
PIVOT
(
    MAX([MAX]) FOR [MAX] IN ([26],[27],[28],[29])
)B
UNION ALL
SELECT 'MIN',CONVERT(VARCHAR,[20]),CONVERT(VARCHAR,[21]),CONVERT(VARCHAR,    [22]),CONVERT(VARCHAR,[23]) FROM (
SELECT [MIN] FROM #TABLE)A
PIVOT
(
    MAX([MIN]) FOR [MIN] IN ([20],[21],[22],[23])
)B
UNION ALL
SELECT 'AVG',CONVERT(VARCHAR,[23]),CONVERT(VARCHAR,[24]),CONVERT(VARCHAR,    [25]),CONVERT(VARCHAR,[26]) FROM (
SELECT [AVG] FROM #TABLE)A
PIVOT
(
    MAX([AVG]) FOR [AVG] IN ([23],[24],[25],[26])
)B

尝试附加图片,但无法做到!