sql中列表表到矩阵表的转换

sql中列表表到矩阵表的转换,sql,oracle,Sql,Oracle,我在SQL中有下表: Name | Date | Property | Value ------------------------------------ Name1 | Date1 | PropertyA | Value11A Name1 | Date1 | PropertyB | Value11B Name1 | Date2 | PropertyA | Value12A Name1 | Date2 | PropertyB | Value12B Name2 | Date1 | Prop

我在SQL中有下表:

Name  | Date  | Property  | Value
------------------------------------
Name1 | Date1 | PropertyA | Value11A
Name1 | Date1 | PropertyB | Value11B
Name1 | Date2 | PropertyA | Value12A
Name1 | Date2 | PropertyB | Value12B
Name2 | Date1 | PropertyA | Value21A
Name2 | Date1 | PropertyB | Value21B
Name2 | Date2 | PropertyA | Value22A
Name2 | Date2 | PropertyB | Value22B
------------------------------------
并希望有以下输出:

Name  | Date  | PropertyAValue | PropertyBValue
-----------------------------------------------
Name1 | Date1 | Value11A       | Value11B
Name1 | Date2 | Value12A       | Value12B
Name2 | Date1 | Value21A       | Value21B
Name2 | Date2 | Value22A       | Value22B
我构建了一些可以与许多select/where语句一起工作的东西。但是一旦你有了10个属性,查询就会变得非常繁重。你能帮我做点更有效率的事吗


编辑:我在Oracle上。我也查看了pivot函数,但它只适用于聚合值,但我不聚合任何内容,只对表进行重新格式化并将一个值作为列。

pivot
可在SQL Server中使用,以实现您想要的:

SELECT Name, Date, [PropertyA] AS PropertyAValue , [PropertyB] AS PropertyBValue
FROM
(SELECT * FROM your_table) p
PIVOT
(
    MAX(Value) 
    FOR Property IN ([PropertyA],[PropertyB])
) AS pvt 
这是你的密码

这是与上述查询相当的Oracle查询:

SELECT *
FROM   (SELECT Name, Date1, Property, Value
        FROM   your_table)
PIVOT  (MAX(Value)  FOR (Property) IN ('PropertyA' AS PropertyA, 'PropertyB' AS PropertyB))
ORDER BY Name, Date1;

这是在

Use
PIVOT
,…请添加您正在使用的DB服务器的标记…Oracle,MySQL…?欢迎,您可以尝试在Oracle中使用
PIVOT
。它仅在聚合值时起作用,但我需要通过重新构造表来分别使用所有值。因为列和行组合有唯一的值,使用
MAX
基本上会导致为行-列组合显示相同的唯一值。在这种特殊情况下,
PIVOT
会导致数据重构,而不会产生任何真正的聚合,即使我们使用了
MAX
,但这只是为了符合语法。