获取总计数和子集计数的最简单方法是什么?

Abe*_*ler 5 sql sql-server sql-server-2005

我试图这样做:

SELECT COUNT(*),
        (
            SELECT COUNT(*) FROM attend
            WHERE (DATEPART(WEEKDAY,start_date) = 2 OR DATEPART(WEEKDAY,start_date) = 6)
            AND empl_no = 12345
        )
        FROM attend as a
 WHERE empl_no = 12345
Run Code Online (Sandbox Code Playgroud)

但这看起来有点难看.有一个更好的方法吗?

nat*_*e c 10

使用:

SELECT COUNT(*) AS total,
       SUM(CASE 
             WHEN DATEPART(WEEKDAY, t.start_date) IN (2,6) THEN 1 
             ELSE 0 
           END) AS weekday
  FROM ATTEND t
 WHERE t.empl_no = 12345
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 7

您可以使用CTE:

WITH T1 AS (
    SELECT DATEPART(WEEKDAY,start_date) AS weekday
    FROM attend
    WHERE empl_no = 12345
)
SELECT
    (SELECT COUNT(*) FROM T1) AS total,
    (SELECT COUNT(*) FROM T1 WHERE weekday = 2 OR weekday = 6) AS subset
Run Code Online (Sandbox Code Playgroud)