【问题标题】:SQL Pivot with multiple values具有多个值的 SQL Pivot
【发布时间】:2017-01-20 17:02:47
【问题描述】:

你好,我有一张这样的桌子:

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 个属性。还有其他方法吗?

这是我的 Pivot 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)

【问题讨论】:

  • 你是如何尝试显示查询的。
  • 显示您尝试过的内容。如果你表现出你的努力,你会得到更多的投入。

标签: sql sql-server pivot


【解决方案1】:

正如您所指出的,Pivot 可以进行聚合,虽然有可能的解决方法,但您可以通过以下方式完成您需要的操作,而无需使用 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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 2012-10-15
    • 2019-02-27
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多