neeraj_ Ответов: 2

Как использовать pivot в SQL для столбца даты


у меня есть таблица с staffid и датой оценки, я хочу повернуть эту дату как date1,date2 и date 3.

Что я уже пробовал:

select * from 
(  select staffid, effectivedate  from EvaluationDetail) src
pivot
(  avg(staffid)  for effectivedate in ([effectivedate1], [effectivedate2], [effectivedate3]) ) piv;

OriginalGriff

И что же?
Что же он сделал такого, чего вы не ожидали, или не сделали того, что сделали?
А что вы пробовали?
Где ты застрял?
Какая помощь вам нужна?

neeraj_

Сэр, я хочу, чтобы выход был поставлен вот так-
Идентификатор персонала effectivedate1 effectivedate2 effectivedate3
9240 2017-04-01 2018-04-01 2018-09-01

Santosh kumar Pithani

Не передавайте "[effectivedate1], [effectivedate2], [effectivedate3]" вот так, а не так
значения должны быть похожи на дату "[2018-04-12],[2018-05-28]"..

neeraj_

Сэр, я хочу, чтобы выход был поставлен вот так-
Staffid effectivedate1 effectivedate2 effectivedate3
9240 2017-04-01 2018-04-01 2018-09-01

2 Ответов

Рейтинг:
17

Richard Deeming

Немного угадав, как вы хотите заполнить столбцы, попробуйте сделать что-то вроде этого:

WITH cteOrderedDates As
(
    SELECT
        StaffId,
        EffectiveDate,
        ROW_NUMBER() OVER (PARTITION BY StaffId ORDER BY EffectiveDate DESC) As RN
    FROM
        EvaluationDetail As D
)
SELECT
    StaffId,
    MAX(CASE RN WHEN 3 THEN EffectiveDate END) As EffectiveDate1,
    MAX(CASE RN WHEN 2 THEN EffectiveDate END) As EffectiveDate2,
    MAX(CASE RN WHEN 1 THEN EffectiveDate END) As EffectiveDate3
FROM
    cteOrderedDates
WHERE
    RN <= 3
GROUP BY
    StaffId
;


neeraj_

большое вам спасибо, сэр.

работать правильно

Рейтинг:
1

CHill60

Вы должны перечислить даты, которые вы хотите включить, например

select * from 
(  select staffid, effectivedate  from #EvaluationDetail) src
pivot
(  count(staffid)  for effectivedate in ([2018-01-10], [2018-03-10], [2018-02-05]) ) piv;
Обратите внимание, я изменил функцию, чтобы count потому что средний staffid ничего не значит вообще.

Я предположил, что колонка effectivedate объявляется как тип date - конкретно нет datetime!

Если вы хотите, чтобы этот список дат определялся самими данными, то вам понадобится некоторый динамический SQL.


neeraj_

Сэр,
Вообще-то мне не нужен счет свиданий .
я хочу, чтобы выход был таким
Идентификатор персонала effectivedate1 effectivedate2 effectivedate3
9240 2017-04-01 2018-04-01 2018-09-01