Mahesh Pattnayak Ответов: 2

Как использовать пользовательский PIVOT в SQL server ? как показать неделю нет между ОТ и до даты с помощью оператора PIVOT в SQL server ?


У меня есть одна таблица "tblEmployeeDetails", где сохраняются данные о сотрудниках.

Emp ID  Emp-Name Age  Date_of_Joining
-------------------------------------
E001    Mahesh   25   18-01-2016
E004    Suresh   29   13-01-2016 
E002    Kumar    23   10-01-2016
E003    Raj      27   26-01-2016


при поиске с даты "01-01-2016" и до даты "31-01-2016".Итоговый результат будет показан в выходных данных как :

[01-2016]  [02-2016]  [03-2016] [04-2016] [05-2016]
----------------------------------------------------
   0           2          1        1         0
----------------------------------------------------


в выходных данных заголовок показывает [неделя Нет-год ],
от даты и до даты(с 1 января 2016 года по 31 января 2016 года)-5 недель.
таким образом, на выходе он показывает 5 недель с годом.
в течение 1-й недели ни один сотрудник не присоединился.
на 2-й неделе к нам присоединились 2 сотрудника.
на 3-й неделе к нам присоединился 1 сотрудник.
на 4-й неделе к нам присоединился 1 сотрудник.
на 5-й неделе ни один сотрудник не присоединился.

я не знаю, как показать этот результат..
Пожалуйста помочь..
Заранее спасибо...

С уважением
Махеш

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

Emp ID  Emp-Name Age  Date_of_Joining
-------------------------------------
E001    Mahesh   25   18-01-2016
E004    Suresh   29   13-01-2016 
E002    Kumar    23   10-01-2016
E003    Raj      27   26-01-2016

OriginalGriff

Что вы пробовали?
Где ты застрял?
Какая помощь вам нужна?
Покажите нам SQL, который вы использовали, и объясните, что он делает, чего вы не ожидали, или не делает того, что вы сделали.
Используйте виджет" улучшить вопрос", чтобы отредактировать свой вопрос и предоставить более подробную информацию.

Mahesh Pattnayak

сэр, я не знаю, что делать в этом ?

Mahesh Pattnayak

сэр, я не знаю, что делать в этом ?

2 Ответов

Рейтинг:
2

jamuro77

Я бы сказал, что у вас есть почти идентичный случай в Примере 3. Использование PIVOT с SQL Server[^]

Я надеюсь, что это полезно для вас


Рейтинг:
0

OriginalGriff

Цитата:
сэр, я не знаю, что делать в этом ?

Итак, начните с получения данных в агрегированной форме:
SELECT DatePart(ww, Date_of_Joining) AS WeekNo, COUNT(*) AS PerMonth 
FROM tblEmployeeDetails 
GROUP BY DatePart(ww, Date_of_Joining)
Это дает вам необходимую информацию, без обнуленной информации и без разворота.
Затем добавьте нулевую информацию: это сложно, и самый простой способ сделать это-создать таблицу всех чисел недели: один столбец, содержащий от 1 до 53 включительно.
SELECT w.WeekNo AS WeekNo, COUNT(s.EMPId) AS PerMonth 
FROM tblEmployeeDetails s
RIGHT JOIN dbo.WeekNumbers w ON w.WeekNo = DatePart(ww, s.Date_of_Joining)
WHERE w.WeekNo BETWEEN 1 AND 5
GROUP BY w.WeekNo

Теперь у вас есть необработанные данные, которые вам нужны:
WeekNo	PerMonth
1	0
2	0
3	2
4	1
5	1
И все, что вам осталось сделать, это повернуть его. Я оставляю это тебе! :смеяться:


Mahesh Pattnayak

Сэр, вот вы установили неделю № от 1 до 5 . но если дата от 1 февраля 2016 года и до 1 апреля 2016 года, то как получить неделю нет .

OriginalGriff

Воспользуйся
DATEPART(ww,...
Он возвращает номер недели с даты.

Mahesh Pattnayak

и как повернуть запрос, если дата изменилась.

OriginalGriff

Используйте PIVOT!

Mahesh Pattnayak

в pivot мы должны упомянуть имена столбцов, но здесь как упомянуть имена недель dyanamically. потому что если выбрать 4 месяца данных, то 16 недель , если выбрать 2 месяца, то 8 недель .

OriginalGriff

Вам нужен динамический разворот:
http://sqlhints.com/2014/03/18/dynamic-pivot-in-sql-server/

Mahesh Pattnayak

сэр, я делаю проект, где мне нужно ввести дату от даты и до даты, в соответствии с датой, он покажет сводные данные по неделям . как показать недели дианамически с помощью pivot.. пожалуйста помочь.