Member 12605293 Ответов: 1

Как выбрать столбец на основе условия?


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

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

<pre>SELECT COUNT(EmpID) AS NewJoinees FROM EmployeeDetails AS EmployeeDetails_7  WHERE                                  
(DATEPART(yyyy, DOJ) = 2017) AND (DATEPART(mm, DOJ) = 02) and datepart(mm,DOJ)<='02' and status=0
                                                                                         
SELECT COUNT(EmpID) AS Resigned FROM EmployeeDetails AS EmployeeDetails_7 WHERE (DATEPART(yyyy, deactivate) = 2017) AND (DATEPART(mm, deactivate) <= '04') and Status=1                                                                                                                              
 SELECT COUNT(EmpID) AS TotalEmployee FROM EmployeeDetails AS EmployeeDetails_7 where  (datepart(yyyy,DOJ) between 2005 and 2017)and datepart(mm,DOJ) <='12' and status=0

OriginalGriff

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

ZurdoDev

Как выбрать столбец на основе условия? Что это значит? Приведите пример.

Member 12605293

 SELECT Count(EmpID) As NewJoinees,Count(EmpID) As Resigned,Count(EmpID) As Total
 From EmployeeDetails
 WHERE                                  
(DATEPART(yyyy, DOJ) = 2017) AND (DATEPART(mm, DOJ) = 02) and datepart(mm,DOJ)<='02' and status=0 AND
 (DATEPART(yyyy, deactivate) = 2017) AND (DATEPART(mm, deactivate) <= '01') and Status=1 AND
 (datepart(yyyy,DOJ) between 2005 and 2017)and datepart(mm,DOJ) <='12' and status=0
  

ZurdoDev

1. ответьте на комментарий так, чтобы пользователь был уведомлен.
2. Я попросил вас объяснить, что вы пытаетесь сделать, и вместо этого, вы делаете кучу запросов SQL. Вы ожидаете, что кто-нибудь поможет вам, если вы не можете объяснить проблему?

Member 12605293

Привет, Райан.Я сожалею, что торопился, не смог правильно задать вопрос.Спасибо за ваше предложение и быстрый ответ :)

1 Ответов

Рейтинг:
4

Rajesh Bhat

 Below code should work as per your requirement

;WITH CTE AS(
 SELECT TotalEmployee=case when (datepart(yyyy,DOJ) between 2005 and 2017)and datepart(mm,DOJ) <='12' and status=0 THEN COUNT(EmpID) ELSE 0 END,
        Resigned=case when (DATEPART(yyyy, deactivate) = 2017) AND (DATEPART(mm, deactivate) <= '04') and Status=1 THEN COUNT(EmpID) ELSE 0 END,
        NewJoinees=case when (DATEPART(yyyy, DOJ) = 2017) AND (DATEPART(mm, DOJ) = 02) and datepart(mm,DOJ)<='02' and status=0 THEN COUNT(EmpID) ELSE 0 END
 FROM EmployeeDetails AS EmployeeDetails_7 
 group by DOJ,deactivate,status
 )
 SELECT SUM(TotalEmployee) TotalEmployee,SUM(Resigned)Resigned,SUM(NewJoinees) NewJoinees FROM CTE


Member 12605293

Привет Раджеш ,
Спасибо за ваш ответ,я должен добавить эту колонку и иметь эти результаты внизу.