2013-09-26 98 views
9

Tôi có một cái gì đó như thế này:Teradata sql trục nhiều lần xuất hiện vào các cột bổ sung

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

Và tôi muốn trả lại một cái gì đó như thế này:

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

Tôi đã tìm kiếm trên trục và concats và phá vỡ và tôi không thể tìm thấy một giải pháp đơn giản, hợp lý.

TIA

+0

Bạn sẽ có số lượng kết quả hạn chế cho mỗi id? – Taryn

+0

Tôi không chắc chắn những gì bạn đang yêu cầu. Mỗi ID có thể có hoặc có thể không có kết quả bổ sung, nhưng không nhiều hơn khoảng 10. – user2820576

Trả lời

15

Thật không may Teradata không có chức năng PIVOT nhưng bạn có thể sử dụng hàm tổng hợp với biểu thức CASE để có kết quả.

select id, 
    max(case when seq =1 then result end) result1, 
    max(case when seq =2 then result end) result2, 
    max(case when seq =3 then result end) result3 
from 
(
    select id, res, row_number() over(partition by id order by result) seq 
    from yourtable 
) d 
group by id 
order by id; 

Nếu bạn có nhiều giá trị hơn cho mỗi ID, thì bạn có thể thêm các biểu thức CASE khác.

+0

Cảm ơn bạn, bluefeet. Tôi đã có thể làm điều đó để làm việc cho tôi. – user2820576

+0

bluefeet, nếu một số hàng được đánh số có cùng giá trị thì sao? Có cách nào trong phương pháp này để bỏ qua chúng nếu chúng là giá trị trùng lặp? – user2820576

+0

@ user2820576 Tôi khuyên bạn nên đặt câu hỏi mới với các chi tiết và yêu cầu mới – Taryn