Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да обобщите данни от една таблица с SQL сървър 2005

Това всъщност може да се направи доста лесно с PIVOT функция. Тъй като другият отговор не показва кода, свързан с това как да го изпълните, ето два начина за PIVOT данните.

Първият е със Статична осова точка . Статично обобщение е, когато знаете данните предварително, за да ги превърнете в колони.

select *
from 
(
    select name, id, convert(char(5), dt, 101) dt, jobid, amount
    from test
) x
pivot
(
    sum(amount)
    for dt in ([01/02], [02/02], [03/02], [04/05], [05/05])
)p
order by jobid, name

Вижте SQL Fiddle с демонстрация

Вторият начин е чрез използване на Dynamic PIVOT за идентифициране по време на изпълнение на стойностите, които да се превърнат в колони.

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(convert(char(5), dt, 101)) 
                    from test
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT name, id, ' + @cols + ', jobid from 
             (
                select  name, id, convert(char(5), dt, 101) dt, jobid, amount
                from test
            ) x
            pivot 
            (
                sum(amount)
                for dt in (' + @cols + ')
            ) p 
            order by jobid, name'

execute(@query)

Вижте SQL Fiddle с демонстрация

И двете ще дадат едни и същи резултати. Dynamic работи чудесно, когато не знаете предварително стойностите, които да конвертирате в колони.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Възможно ли е SQL да сравнява общия брой поръчки на час и да премахва текущата наличност?

  2. 3 начина за връщане на низ от множество интервали в SQL Server

  3. SQL - Завъртете няколко колони без агрегати

  4. PIVOT динамично, върнати резултати от JOIN на две таблици

  5. Как да видя пълното съдържание на текстова или varchar(MAX) колона в SQL Server 2008 Management Studio?