子查询中的mssql distinct count

时间:2014-10-08 12:36:55

标签: sql-server

我有类似

的sql
select
name,col2,col3,date
from
table1 join on few tables

结果是

name col2 col3 date
a    a    a    datetime1
a    a    a    datetime1
b    b    b    datetime2
b    b    b    datetime3

并且我不知道该怎么做,但我需要将日期列替换为列 显示每个名称/行的工作日数

我虽然关于子查询,如

,(select COUNT(distinct DATENAME(dw, date) NOT IN ('Saturday', 'Sunday')) where name = '...' from ... where ...) as WorkingDays

但我需要帮助才能让它正常工作,谢谢。

2 个答案:

答案 0 :(得分:2)

也许你想要这个:

SELECT Name, C2,  
       WorkingDays = Sum(CASE WHEN Datename(DW, [date])IN( 'Saturday', 'Sunday' ) 
                         THEN 0 ELSE 1 END) 
                       OVER (PARTITION BY Name) 
FROM dbo.data

以下是样本数据的sql-fiddle:http://sqlfiddle.com/#!3/1279f/14/0

答案 1 :(得分:1)

如果我的理解没有错,你只需要一个其他列的组合并计算' date'

   select
        name,col2,col3,count(date) as no_of_days
        from
        table1 join on few tables
        where DATENAME(dw, date) NOT IN ('Saturday', 'Sunday')
        group by name,col2,col3