0

我有这样的事情:

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

请注意,ID 3 有相同的结果出现在两行中。

多亏了 bluefeet( teradata sql 将多次出现的位置转换为额外的列),我能够产生这样的结果:

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

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

4

1 回答 1

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;
于 2013-09-28T10:24:10.673 回答