Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从表中选择值作为列标题_Sql_Oracle - Fatal编程技术网

Sql 从表中选择值作为列标题

Sql 从表中选择值作为列标题,sql,oracle,Sql,Oracle,我有一个具有以下结构的表: ID KEY VALUE SEQ 1 Amount 5 2 1 Amount 4 1 1 Type T1 2 1 Type T1 1 2 Amount 10 2 2 Amount 5 1 2 Type T2 2 2 Type T2 1 我想创建一个查询以获取以下信息: ID Amoun

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

ID  KEY     VALUE   SEQ
1   Amount  5       2   
1   Amount  4       1
1   Type    T1      2   
1   Type    T1      1
2   Amount  10      2   
2   Amount  5       1
2   Type    T2      2
2   Type    T2      1
我想创建一个查询以获取以下信息:

ID  Amount  Type
1   5       T1
2   10      T2
正如您所看到的,(ID,Key)可以有多种组合,但(ID,Key,Seq)是唯一的

SELECT  T.ID, 
        T1.VALUE as Amount, 
        T2.VALUE as Type
FROM 
    (SELECT ID, MAX(SEQ) as MAXSEQ FROM TABLE GROUP BY ID) as T
    JOIN
        TABLE as T1
            ON T1.ID = T.ID
            AND T1.KEY = 'Amount'
            AND T1.SEQ = MAXSEQ
    JOIN
        TABLE as T2
            ON T2.ID = T.ID
            AND T2.KEY = 'Type'
            AND T2.SEQ = MAXSEQ
但是我得到了我没有预料到的结果

ID  Amount  Type

    1   5       T1
    1   4       T1
    1   10      T1
    1   5       T1
    2   10      T2
    2   5       T2
    2   4       T2
    2   5       T2
我已经读过这篇文章,但它不适用于我的情况,虽然它有帮助


你知道该由谁来解决这个问题吗?

你缺少的是
DISTINCT
关键字

另请参见下面的解释。事实上,您得到的是重复的,因为您正在加入一个表本身。因此,行将被镜像

您的子查询应该是:

(SELECT DISTINCT ID, MAX(SEQ) as MAXSEQ FROM TABLE GROUP BY ID) as T

我意识到还有另外一个专栏,我没有提出这个问题(为了避免给出真实数据),这影响了结果。唯一的约束是(ID,Key,Seq,Time),而不是(ID,Key,Seq)。正如@Andrew提到的,查询返回的是正确的结果

问题又来了

SELECT  T.ID, 
        T1.VALUE as Amount, 
        T2.VALUE as Type
FROM 
    (SELECT ID, MAX(SEQ) as MAXSEQ FROM TABLE GROUP BY ID) as T
    JOIN
        TABLE as T1
            ON T1.ID = T.ID
            AND T1.KEY = 'Amount'
            AND T1.SEQ = MAXSEQ
    JOIN
        TABLE as T2
            ON T2.ID = T.ID
            AND T2.KEY = 'Type'
            AND T2.SEQ = MAXSEQ

感谢Andrew的澄清和支持。如果我浪费了任何人的时间,我表示歉意。

我想我得到了想要的结果。我有什么误解吗?谢谢你的评论安德鲁。。您正在示例中使用sql server。我用的是oraclenot真的。通过按id分组,我将获得与DISTINCT相同的效果。
SELECT  T.ID, 
        T1.VALUE as Amount, 
        T2.VALUE as Type
FROM 
    (SELECT ID, MAX(SEQ) as MAXSEQ FROM TABLE GROUP BY ID) as T
    JOIN
        TABLE as T1
            ON T1.ID = T.ID
            AND T1.KEY = 'Amount'
            AND T1.SEQ = MAXSEQ
    JOIN
        TABLE as T2
            ON T2.ID = T.ID
            AND T2.KEY = 'Type'
            AND T2.SEQ = MAXSEQ