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

Как мога да използвам pivot?

Проверих вашата техническа публикация тук и открих, че не искате да използвате PIVOT, защото връща само обобщени резултати. UNPIVOT ще ви доближи много до това, което търсите и след това просто направете съединяване на таблицата за всяка колона. Направих пример с данните, които сте дали по-долу:

----Create the table and insert values as portrayed in the previous example.
CREATE TABLE pvt (EmpId int, Day1 char(1), Day2 char(1), Day3 char(1));
CREATE TABLE pvt2 (EmpId int, DayNum CHAR(4), DayNums CHAR(4));
GO
INSERT INTO pvt VALUES (1,'A','P','P');
INSERT INTO pvt VALUES (2,'P','P','P');
GO
--Unpivot the table.
INSERT INTO pvt2
SELECT EmpId,DayNum, DayNums
FROM 
   (SELECT EmpId, Day1, Day2, Day3
   FROM pvt) p
UNPIVOT
   (DayNums FOR DayNum IN 
      (Day1,Day2,Day3)
)AS unpvt;
GO
SELECT
 a.DayNum,
 a.DayNums,
    b.DayNums
FROM pvt2 a
 JOIN pvt2 b ON a.DayNum = b.DayNum
  AND a.EmpId=1
  AND b.EmpId = 2

Изпълнението на горния код ще върне:

Exp   1  2  3 as EmpId
----------
Day1  A  P  ....
Day2  P  P  ...
Day3  P  P  ...

Единственото друго решение, за което знам, е динамичният 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. Класически ADO.NET - Как да предам UDT към съхранена процедура?

  3. Еквивалент на Sql сървър на агрегатна функция COUNTIF

  4. SQL грешка:„CREATE/ALTER PROCEDURE“ трябва да бъде първият израз в пакета на заявката

  5. Сравнете датите в T-SQL, игнорирайки частта от времето