Displaying multiple values into columns in sql server using pivot

回眸只為那壹抹淺笑 提交于 2019-12-25 01:06:01

问题


declare @t table 
(
    driver varchar(20),
    roadband varchar(20),
    category varchar(20),
    points int

)   

INSERT INTO @T VALUES( 'Dan'    ,'20 Mph','CAT1',58)
INSERT INTO @T VALUES( 'Dan'    ,'20 Mph',  'CAT2', 0)
INSERT INTO @T VALUES( 'Dan'    ,'20 Mph',  'CAT3', 0)
INSERT INTO @T VALUES( 'Dan'    ,'30 Mph',  'CAT1', 102)
INSERT INTO @T VALUES( 'Dan'    ,'30 Mph',  'CAT2', 30)
INSERT INTO @T VALUES( 'Dan'    ,'30 Mph',  'CAT3', 0)
INSERT INTO @T VALUES( 'Dan'    ,'40 Mph',  'CAT1', 6)
INSERT INTO @T VALUES( 'Dan'    ,'40 Mph',  'CAT2', 3)
INSERT INTO @T VALUES( 'Dan'    ,'40 Mph',  'CAT3', 0)
INSERT INTO @T VALUES( 'Dan'    ,'50 Mph',  'CAT1', 5)
INSERT INTO @T VALUES( 'Dan'    ,'50 Mph',  'CAT2', 0)
INSERT INTO @T VALUES( 'Dan'    ,'50 Mph',  'CAT3', 0)
INSERT INTO @T VALUES( 'Dan'    ,'60 Mph',  'CAT1', 0)
INSERT INTO @T VALUES( 'Dan'    ,'60 Mph',  'CAT2', 0)
INSERT INTO @T VALUES( 'Dan'    ,'60 Mph',  'CAT3', 0)
INSERT INTO @T VALUES( 'Dan'    ,'70 Mph',  'CAT1', 0)
INSERT INTO @T VALUES( 'Dan'    ,'70 Mph',  'CAT2', 0)
INSERT INTO @T VALUES( 'Dan'    ,'70 Mph',  'CAT3', 0)
INSERT INTO @T VALUES( 'John'   ,'20 Mph',  'CAT1', 6)
INSERT INTO @T VALUES( 'John'   ,'20 Mph',  'CAT2', 0)
INSERT INTO @T VALUES( 'John'   ,'20 Mph',  'CAT3', 0)
INSERT INTO @T VALUES( 'John'   ,'30 Mph',  'CAT1', 1228)
INSERT INTO @T VALUES( 'John'   ,'30 Mph',  'CAT2', 654)
INSERT INTO @T VALUES( 'John'   ,'30 Mph',  'CAT3', 0)
INSERT INTO @T VALUES( 'John'   ,'40 Mph',  'CAT1', 196)
INSERT INTO @T VALUES( 'John'   ,'40 Mph',  'CAT2', 117)
INSERT INTO @T VALUES( 'John'   ,'40 Mph',  'CAT3', 0)
INSERT INTO @T VALUES( 'John'   ,'50 Mph',  'CAT1', 6)
INSERT INTO @T VALUES( 'John'   ,'50 Mph',  'CAT2', 14)
INSERT INTO @T VALUES( 'John'   ,'50 Mph',  'CAT3', 0)
INSERT INTO @T VALUES( 'John'   ,'60 Mph',  'CAT1', 0)
INSERT INTO @T VALUES( 'John'   ,'60 Mph',  'CAT2', 0)
INSERT INTO @T VALUES( 'John'   ,'60 Mph',  'CAT3', 0)
INSERT INTO @T VALUES( 'John'   ,'70 Mph',  'CAT1', 0)
INSERT INTO @T VALUES( 'John'   ,'70 Mph',  'CAT2', 0)
INSERT INTO @T VALUES( 'John'   ,'70 Mph',  'CAT3', 0)

I need to pivot on Roadband and Category..

I have written the query .. need some help..

select * from 
(
   select 
     Driver,  ROADBAND,  category,SUM(points) as Points
   from @t
   where DRIVER is not null
   group by DRIVER ,ROADBAND,CATEGORY
) main
pivot
(
    sum(Points)
    for ROADBAND in ([20 Mph],[30 Mph],[40 Mph],[50 Mph],[60 Mph],[70 Mph])
) pq

Now how can make the pivot for each category by roadband.

please help.


回答1:


From your question I wasn't sure what values you wanted in columns and what should be in rows so I wrote both queries, I hope one of them answers your question:

SELECT  *
FROM    (
            SELECT  category
                    , roadband
                    , SUM(points) points_per_category_roadband
            FROM    @t
            GROUP BY
                    category, roadband
) tbl
PIVOT
(
    SUM(points_per_category_roadband) FOR roadband IN ([20 Mph],[30 Mph],[40 Mph],[50 Mph],[60 Mph],[70 Mph])
) pvt


SELECT  *
FROM    (
            SELECT  roadband
                    , category
                    , SUM(points) points_per_category_roadband
            FROM    @t
            GROUP BY
                    roadband, category
) tbl
PIVOT
(
    SUM(points_per_category_roadband) FOR category IN ([CAT1],[CAT2],[CAT3])
) pvt


来源:https://stackoverflow.com/questions/14627959/displaying-multiple-values-into-columns-in-sql-server-using-pivot

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!