在不使用Group By的情况下识别列的不同计数

时间:2017-04-11 17:44:42

标签: sql sql-server

我试图弄清楚如何获得有条件且不使用分组的东西的独特计数。我有一张表格,其中包含如下所示的列:

Employeeid,Training_Course_name,CompletedDate

有些课程中包含Rope这个词。 我想用每个人完成的课程数量和#34; Rope"在标题中,除以标题中有单词rope的唯一课程数量。如果有15个唯一的课程名称在标题中包含单词rope,无论他们被分配给谁,我想得出这个数字并将其分成每人完成的绳索课程数。 / p>

3 个答案:

答案 0 :(得分:0)

您可以使用条件聚合:

select count(distinct case when Training_Course_name like '%rope%'
                           then Training_Course_name
             end) as courses_with_rope

答案 1 :(得分:0)

这将帮助您解决问题

Declare @UniqueCourses As TABLE(Course As VarChar(32))

Select @UniqueCourses = Training_Course_Name 
From
    (SELECT DISTINCT Training_Course_Name 
    FROM Employess 
    WHERE Training_Course_Name LIKE '%Rope%') A 

SELECT 
EmpId,
     (SELECT COUNT(1) FROM Employees innerEmployees
      WHERE innerEmployees.EmpId = outerEmployees.EmpId AND 
      innerEmployees.CompletedDate is not null
     ) AS Completed Courses
From Employees outerEmployees

答案 2 :(得分:0)

您可以使用此查询获取带有单词rope的课程

SELECT Employeeid, Training_Course_name, CompletedDate
FROM Table_Name_You_Did_Not_Say
WHERE Training_Course_name LIKE '%rope%'

这是一个非常重要的计数

SELECT Employeeid, Training_Course_name, CompletedDate, 
       count(distinct Training_Course_name) as distinct_names
FROM Table_Name_You_Did_Not_Say
WHERE Training_Course_name LIKE '%rope%'

任何“按员工ID”都需要一个小组 - 那么你的要求到底是什么?