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

t-sql заявка между таблица със събития и период от време

Това, което търсите, обикновено се нарича кръстосана заявка. Ако това, което питате, е как да създадете кръстосана заявка, дадена статична списък от колони, можете да направите нещо подобно:

Select Title
    , Min( Case When DatePart(mm, [Date]) = 7 And DatePart(yy, [Date]) = 2010 Then MetaData End ) As [Jul-10]
    , Min( Case When DatePart(mm, [Date]) = 8 And DatePart(yy, [Date]) = 2010 Then MetaData End ) As [Aug-10]   
    , Min( Case When DatePart(mm, [Date]) = 9 And DatePart(yy, [Date]) = 2010 Then MetaData End ) As [Sep-10]       
    ...
From Table
Where [Date] Between @StartDate And @EndDate
Group By Title

По същия начин можете да използвате функционалността PIVOT, както е предложено от Broken Link. Въпреки това както горното решение, така и функционалността PIVOT разчитат на статични декларации на колони. Ако това, което искате, е динамичен списък от колони (известен още като динамична кръстосана таблица), тогава сте извън границите на това, което T-SQL е предназначен да прави основно. Възможно е с някакъв глупав динамичен SQL, но е крехък и тромав. Вместо това трябва да изградите набора от резултати в компонент от средно ниво или да използвате инструмент за отчитане, който ще изгради кръстосани резултати.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Таблица срещу производителност на временна таблица

  2. SQL - изберете отделни записи в едно поле с най-високи записи от друго поле

  3. Съхраняване на съобщението за рейзрор на SqlServer в C#

  4. Колоните за дата в SQL-Server (MSSQL-JDBC 3.0), работещи под Java 1.7.0, извлечени като 2 дни в миналото

  5. Копирайте данни от една колона в друга колона