Sql Pivot top N строк только - PullRequest
       9

Sql Pivot top N строк только

2 голосов
/ 22 сентября 2010

У меня следующая структура

Col1 Col2 Col3  
---------------
F     P    R1
F     P    R2
F     P    R3
F     P    R4

Значения Col3 могут быть любыми Теперь я хочу в следующем формате только топ 3

Col1 Col2 Res1 Res2 Res3  
------------------------------
F     P    R1   R2   R3

Ответы [ 3 ]

2 голосов
/ 22 сентября 2010

При использовании SQL Server 2005+, Oracle 8i +, PostgreSQL 8.4 + - вы можете использовать аналитические функции:

  SELECT x.col1, x.col2,
         MAX(CASE WHEN x.rk = 1 THEN x.col3 END) AS Res1,
         MAX(CASE WHEN x.rk = 2 THEN x.col3 END) AS Res2,
         MAX(CASE WHEN x.rk = 3 THEN x.col3 END) AS Res3
    FROM (SELECT yt.col1,
                 yt.col2,
                 yt.col3,
                 ROW_NUMBER() OVER(PARTITION BY yt.col1, yt.col2
                                       ORDER BY yt.col3) AS rk
            FROM YOUR_TABLE yt) x
GROUP BY x.col1, x.col2
0 голосов
/ 22 сентября 2010

То, что вы ищете - это динамический перекрестный запрос, который будет строить столбцы из значений в Col3. Язык SQL не был разработан для динамической генерации столбцов, и поэтому этот тип запроса не может быть выполнен в T-SQL без некоторого беспорядочно динамического SQL. Вместо этого я бы порекомендовал вам построить запрос в компоненте среднего уровня или использовать инструмент отчетности.

0 голосов
/ 22 сентября 2010

Вы можете сделать следующее:

SELECT Col1, Col2,
    MAX(CASE Col3 WHEN 'R1' THEN 'R1' END) as Res1,
    MAX(CASE Col3 WHEN 'R2' THEN 'R2' END) as Res2,
    MAX(CASE Col3 WHEN 'R3' THEN 'R3' END) as Res3
FROM MyTable
GROUP BY Col1, Col2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...