2013-09-12 2 views
1

Теперь я использую два опорных точки для отображения результатов. Пожалуйста, помогите мне объединить эти стержни. Я хочу получить результат, например, EmpId, распад Daystatus и количество [1] для соответствующего EmpId.Слияние двух опорных точек в Sql Server 2008

Поле DayStatus имеет «P», «PH» & Поле «A» и IsLate имеет «1» & '0'.

Чтобы получить ломку EmpId и DayStatus

SELECT * 
FROM (
SELECT EmpId, DayStatus 
FROM Attendance 
WHERE _Date >= '08/01/2013' AND _Date <= '08/31/2013' 
) m 
PIVOT (
COUNT(DayStatus) 
FOR DayStatus IN ([P], [PH], [A]) 
) n 

Output is: 
EmpId P PH A 
EC2818 5 3 0 
EC2825 8 0 0 
EC2826 7 0 1 
EC2827 4 2 2 
EC2828 6 2 0 
EC2829 8 0 0 
EC2830 5 3 0 
EC2831 6 1 1 
EC2833 7 0 1 
EC2834 6 1 1 

Чтобы получить ломку EmpId и IsLate

SELECT * 
FROM (
SELECT EmpId, IsLate 
FROM Attendance 
WHERE _Date >= '08/01/2013' AND _Date <= '08/31/2013' 
) m 
PIVOT (
COUNT(IsLate) 
FOR IsLate IN ([1]) 
) n 

Output is: 
EmpId IsLate 
EC2818 0 
EC2825 0 
EC2826 0 
EC2827 1 
EC2828 0 
EC2829 1 
EC2830 0 
EC2831 0 
EC2833 0 
EC2834 2 

Теперь я хочу вывод следующим образом:

Desired Output: 
EmpId P PH A IsLate 
EC2818 5 3 0 0 
EC2825 8 0 0 0 
EC2826 7 0 1 0 
EC2827 4 2 2 1 
EC2828 6 2 0 0 
EC2829 8 0 0 1 
EC2830 5 3 0 0 
EC2831 6 1 1 0 
EC2833 7 0 1 0 
EC2834 6 1 1 2 

Пожалуйста выручи меня.

+0

Можете ли вы продемонстрировать проблемы с некоторыми образцами данных для вашего поворота таблицы и ваш желаемый результат – Tanner

+0

Привет, Таннер, я изменил вопрос и предоставил желаемый результат. Пожалуйста, помогите мне. – Aruna

+0

Отправили ответ ниже. Глядя на свой профиль, вы никогда не замечали никаких ответов. Если вы отметите правильные/полезные ответы на задаваемые вами вопросы, это улучшит вашу репутацию, что, в свою очередь, побудит людей публиковать ответы на ваши вопросы. – Tanner

ответ

0

Попробуйте ниже, которые должны присоединиться результаты ваших двух сводных таблиц вместе:

SELECT EMP.*, LATE.IsLate 
FROM (
    SELECT * 
    FROM (
     SELECT EmpId, DayStatus 
     FROM Attendance 
     WHERE _Date >= '08/01/2013' AND _Date <= '08/31/2013' 
    ) m 
    PIVOT (
     COUNT(DayStatus) 
     FOR DayStatus IN ([P], [PH], [A]) 
    )) EMP 
JOIN 
    (SELECT * 
    FROM (
     SELECT EmpId, IsLate 
     FROM Attendance 
     WHERE _Date >= '08/01/2013' AND _Date <= '08/31/2013' 
    ) m 
    PIVOT (
     COUNT(IsLate) 
     FOR IsLate IN ([1]) 
    ) n) LATE 
ON EMP.EmpId = LATE.EmpId 
+0

Большое спасибо Tanner за помощь в выборе времени. – Aruna

0

Просто присоединиться к ним вместе:

select * 
from (
     ... pivot1 query ... 
     ) q1 
full outer join 
     (
     ... pivot2 query ... 
     ) q2 
pm  q1.EmpId = q2.EmpId 
+0

Большое спасибо. Теперь я узнал, как присоединиться к опорным точкам. – Aruna

Смежные вопросы