sql >> Databáze >  >> RDS >> Sqlserver

Sql Server 2008 Cross Tab Query

Měli byste to udělat pomocí operátoru 'pivot'. Něco takového (ačkoli jsem si jistý, že jsem zamlčel některé pravopisné nebo syntaktické podrobnosti...):

select catTitle, [1] as site1, [2] as site2, [3] as site3, [4] as site4, [5] as site5
  from (select category.catTitle, equipment.quantity, site.title
          from equipment
            inner join site
              on (equipment.siteid = site.siteid)
            inner join category
              on (category.catid = equipment.catid)
        ) 
  pivot
  (
  sum (quantity)
    for equipment.siteid in ( [1], [2], [3], [4], [5] )
  ) as pvt
order by pvt.category;

Problém je v tom, že potřebujete znát přesnou sadu ID stránek, které chcete zahrnout do dotazu. Pokud potřebujete dynamičtější křížovou tabulku (jako můžete získat v aplikaci Excel), musíte vygenerovat text dotazu jako řetězec a ke spuštění jej použít sp_executesql. Do vygenerovaného textu zahrnete tolik „[1], [2], [3], [4], [5]...“ a „[1] jako web1, [2] jako web2.. .“ věci, jak potřebujete.



  1. SQL Server Regulární výrazy v T-SQL

  2. Jak nastavíte Incemental na true pro více tabulek se stejným vlastníkem pomocí DBMS_STATS.set_table_prefs?

  3. Neplatná výchozí hodnota pro 'dateAdded'

  4. proč rozdělujeme mysql tabulku na mnoho menších tabulek?