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

Sql Server 2008 Cross Tab Query

Трябва да можете да направите това с оператора "pivot". Нещо подобно (въпреки че съм сигурен, че заглуших някои правописни или синтаксисни подробности...):

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;

Проблемът с това е, че трябва да знаете точния набор от идентификатори на сайтове, които искате да включите в заявката. Ако имате нужда от по-динамична кръстосана таблица (каквато можете да получите в Excel), тогава трябва да генерирате текста на заявката като низ и да използвате sp_executesql, за да я изпълните. В генерирания текст включвате колкото се може повече от „[1], [2], [3], [4], [5]...“ и „[1] като сайт1, [2] като сайт2.. ." неща, от които се нуждаете.



  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. SSIS Как да получите част от низ чрез разделител

  3. Йерархични заявки в SQL Server 2005

  4. Подсказки за SQL SERVER 2008 JOIN

  5. Премахнете всички интервали от низ в SQL Server