Teradata SQL支持多个结果并消除重复值

时间:2013-09-27 16:35:25

标签: sql teradata

我有这样的事情:

ID      Result
1       value1
2       value1
2       value2
3       value1
3       value1
4       value1
4       value2
4       value3

请注意,ID 3具有相同的结果,显示在两行中。

感谢bluefeet(teradata sql pivot multiple occurrences into additional columns),我能够产生这样的东西:

ID      Result1      Result2      Result3
1       value1
2       value1       value2
3                    value1
4       value1       value2       value3

我得到了我想要的东西,但由于ID 3有多个结果,因此它们被计为2,然后包含在第二列中,这对于那些为一个ID返回2次的结果。

我希望它只是在Result1列中返回第一次出现的重复ID 3结果,如下所示:

ID      Result1      Result2      Result3
1       value1
2       value1       value2
3       value1
4       value1       value2       value3

如何消除重复结果并防止计数?

1 个答案:

答案 0 :(得分:0)

TD14.10最终添加了DENSE_RANK(可以在bluefeet的查询中使用它代替ROW_NUMBER),但在你必须添加某种DISTINCT处理之前,例如:

SELECT id,
   MAX(CASE WHEN seq =1 THEN res END) result1,
   MAX(CASE WHEN seq =2 THEN res END) result2,
   MAX(CASE WHEN seq =3 THEN res END) result3
FROM
 (
   SELECT id, res, ROW_NUMBER() OVER(PARTITION BY id ORDER BY res) seq
   FROM
    (
      SELECT DISTINCT id, res
      FROM yourtable
    ) d
 ) d
GROUP BY id
ORDER BY id;