繁体   English   中英

SQL Pivot具有多个值

[英]SQL Pivot with multiple values

您好,我有一个像这样的表:

Building    Categories      Properties
-----------------------------------------
Building250 Structure       Steel
Building250 Security        Access Card
Building250 Security        Security Guard
Building250 Security        Fire Alarm System 
Building250 Security        Sprinklered
Building250 Security        Smoke or heat detectors
Building46  Structure       Brick
Building46  Structure       Steel
Building46  Walls           Steel Stud
Building46  Walls           Masonry
Building46  Washroom        OwnSpace
Building46  Washroom        Common
Building46  Security        Access Card
Building46  Security        Burglar Alarm

我需要像这样旋转它:

Building    Structure   Security           Walls       Washroom
----------------------------------------------------------------------------
Building250 Steel       Access Card     
                        Security Guard      
                        Fire Alarm System       
                        Sprinklered     
                        heat detectors      
Building46  Brick       Access Card       Steel Stud    OwnSpace
            Steel       Burglar Alarm     Masonry       Common 
                        Sprinklered     

我尝试了SQL Pivot,但是由于它需要聚合,因此对于给定的类别,它仅返回1个属性。 还有另一种方法吗?

这是我的数据透视SQL:

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

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(Category) 
                  FROM Buildings
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT Building, ' + @cols + ' from 
             (
                SELECT Building, Category, Property, from Buildings
            ) x
            pivot 
            (
                min(Property)
                for Category in (' + @cols + ')
            ) p '

execute(@query)

正如您指出的那样,Pivot可以进行聚合,尽管有一些变通办法,但是您可以通过以下操作无需枢轴即可完成所需的工作。 您也可以使用与动态透视图相同的方法来使其动态化。

Select B.Building, Str.Properties Structure, 
       Sec.Properties Security, Walls.Properties Walls, Wash.Properties Washroom
    From (Select Distinct Building From Table) B
    Left Join Table Str On Str.Building = B.Building And Categories = 'Structure'
    Left Join Table Sec On Sec.Building = B.Building And Categories = 'Security'
    Left Join Table Walls On Walls.Building = B.Building And Categories = 'Walls'
    Left Join Table Wash On Wash.Building = B.Building And Categories = 'Washroom'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM