2013-06-28 2 views
2

В SQL Server 2008 у меня есть запрос. Когда я использую select запрос на моем Student столе, я получаю результирующий набор, как это:Как сделать форматирование в SQL Server

Total Subject   Class 
20  Chemistry   Standard -12 
30  Physics   Standard -12 
94  Biology   Standard -12 
0   Maths    Standard -12 

5  Chemistry   Standard -11 
45  Physics   Standard -11 
50  Biology   Standard -11 
45  Maths    Standard -11 

Но теперь мое требование заключается в том, что мне нужно отформатировать его по-разному - как это:

    Chemistry Biology Physics Maths 
Standard - 12  20  94  30  0 
Standard - 11  5  50  45  45 

ответ

1

I что у вас есть уникальная строка для комбинации классов и предметов.

В этом случае вы можете использовать приведенный ниже запрос -

select class, 
     max(case 
      when subject = 'Chemistry' then 
       total 
      else 
       0 
      end) as Chemistry, 
     max(case 
      when subject = 'Biology' then 
       total 
      else 
       0 
      end) as Biology, 
     max(case 
      when subject = 'Physics' then 
       total 
      else 
       0 
      end) as Physics, 
     max(case 
      when subject = 'Maths' then 
       total 
      else 
       0 
      end) as Maths 
    from your_table_name 
group by class 
+0

Уважаемый Пратик, я попробовал с запросом выше, но он не работает для меня. фактически выше результата, который я получил после применения группы по «классу», а total - количество строк для этого конкретного класса. –

+0

@priyapatel Извините, я не понял, почему этот запрос не работает для вашего дела? –

+0

У меня мало идеи, что я предполагаю использовать «поворот» для достижения этого. –

3

Запрос:

SQLFIDDLEExample

SELECT * 
FROM (SELECT Class, 
     Subject, 
     Total 
     FROM Student) s 
pivot (SUM(Total) 
     FOR [Subject] IN ([Chemistry], [Physics], [Biology], [Maths]) 
     ) piv 

Результат:

|  CLASS | CHEMISTRY | PHYSICS | BIOLOGY | MATHS | 
-------------------------------------------------------- 
| Standard -11 |   5 |  45 |  50 | 45 | 
| Standard -12 |  20 |  30 |  94 |  0 | 
+0

Спасибо, что работает тоже. –