SQL-запрос для преобразования таблицы - PullRequest
1 голос
/ 20 июля 2011

У меня проблема с преобразованием таблицы, которая выглядит следующим образом

city    | distributor | phno
---------------------------------
new york   xxx           12345

new york   yyy           12312

new york   zzz           12313

london     aaa           12315

london     bbb           11111

hong konk  ccc           12311

в

city    | distributor1 | phno1 | distributor2 | phno2 | distributor3 | phno3
-----------------------------------------------------------------------------
new york   xxx           12345      yyy         12312     zzz           12313

london     aaa           12315      bbb         11111     0             0             

hong konk  ccc           12311       0            0       0             0
  • с учетом того, что в любом городе не больше и 3 распределителя

Я попытался самостоятельно присоединиться, но получаю дубликаты записей, пожалуйста, сообщите.

Дайте мне знать, если это будет сделано в Excel ?? , как это только для целей отчетности

Ответы [ 3 ]

2 голосов
/ 20 июля 2011

Вы также можете PIVOT таблицы в SQL.

http://msdn.microsoft.com/en-us/library/ms177410.aspx

1 голос
/ 20 июля 2011

Я думаю, что такое преобразование лучше всего делать в авторе отчетов, а не в базе данных.

1 голос
/ 20 июля 2011

Я не уверен, допустимо ли это в Sybase SQL, но я бы начал с чего-то подобного на других серверах SQL:

SELECT * FROM 
    (SELECT city FROM table GROUP BY city) AS c
LEFT JOIN (SELECT TOP 1 distributor AS distributor1, phno AS phno1 
    FROM table c1 WHERE c1.city = c.city 
    ORDER BY distributor ASC) AS c1
    ON true
LEFT JOIN (SELECT TOP 2 distributor AS distributor2, phno AS phno2 
    FROM table c2 WHERE c2.city = c.city 
    ORDER BY distributor ASC) AS c2
    ON distributor1 != distributor2
LEFT JOIN (SELECT TOP 3 distributor AS distributor3, phno AS phno3 
    FROM table c3 WHERE c3.city = c.city 
    ORDER BY distributor ASC) AS c3
    ON distributor1 != distributor3 AND distributor2 != distributor3
...