添加和函数SQL Server 2012

添加和函数SQL Server 2012,sql,sql-server,tsql,Sql,Sql Server,Tsql,我需要将不同列中的这些分钟加在一起,但当我尝试运行此语句时,我只看到空白。我已经尝试了很多东西,我认为它在where子句中。我将添加在4列以上一旦这是工作 SELECT [School Name], SUM(mins1) ,SUM(mins2) as mins2 ,SUM(mins3) as mins3 ,SUM(mins4) as mins4 ,SUM(mins1+mins2+mins3+mins4) as Minutes FROM [dbo].[George].

我需要将不同列中的这些分钟加在一起,但当我尝试运行此语句时,我只看到空白。我已经尝试了很多东西,我认为它在where子句中。我将添加在4列以上一旦这是工作

SELECT [School Name],
   SUM(mins1)
   ,SUM(mins2) as mins2
  ,SUM(mins3) as mins3
   ,SUM(mins4) as mins4
   ,SUM(mins1+mins2+mins3+mins4) as Minutes
 FROM [dbo].[George].[TEST_TEMP_TABLE]
 WHERE serv1 IS NOT NULL 
AND serv1 = 'Speech Language Therapy'
AND serv2 IS NOT NULL 
AND serv2 = 'Speech Language Therapy'
AND serv3 = 'Speech Language Therapy'
AND serv3 IS NOT NULL 
AND serv4 = 'Speech Language Therapy'
AND serv4 IS NOT NULL 
GROUP BY [School Name]
ORDER BY [School Name]
 GO

在将记录包括在总和中之前,
WHERE
子句中的所有条件必须同时适用于每条记录

因为您看到的是一个空白的输出,所以看起来您没有任何记录,其中serv1、serv2、serv3和serv4都不同时为NULL

因为它看起来像要对每个MIN列进行求和,所以只有当相应的Serv列包含“语音语言治疗”时,考虑将此条件移到<代码>选择< /代码>查询的一部分,如下所示:

WITH CTE AS (
    SELECT [School Name],
       SUM(CASE WHEN serv1 = 'Speech Language Therapy' THEN mins1 ELSE 0 END) as mins1
      ,SUM(CASE WHEN serv2 = 'Speech Language Therapy' THEN mins2 ELSE 0 END) as mins2
      ,SUM(CASE WHEN serv3 = 'Speech Language Therapy' THEN mins3 ELSE 0 END) as mins3
      ,SUM(CASE WHEN serv4 = 'Speech Language Therapy' THEN mins4 ELSE 0 END) as mins4
    FROM [dbo].[George].[TEST_TEMP_TABLE]
    GROUP BY [School Name]
)
SELECT [School Name]
    , mins1, mins2, mins3, mins4
    , mins1 + mins2 + mins3 + mins4 as Minutes
FROM cte
ORDER BY [School Name]
SELECT [School Name],
   SUM(coalesce(mins1,0)) as mins1total,
   SUM(coalesce(mins2,0)) as mins2total,
   SUM(coalesce(mins3,0)) as mins3total,
   SUM(coalesce(mins4,0)) as mins4total,
   SUM(coalesce(min1,0) + coalesce(min2,0) + coalesce(min3,0) + coalesce(min4,0)) as alltotal
 FROM [dbo].[George].[TEST_TEMP_TABLE]
 WHERE 
   serv1 = 'Speech Language Therapy'
   AND serv2 = 'Speech Language Therapy'
   AND serv3 = 'Speech Language Therapy'
   AND serv4 = 'Speech Language Therapy'
GROUP BY [School Name]
ORDER BY [School Name]
在这里,我将mins1..mins4的计算移到了一个CTE中,以便于计算CTE之外所有4个的总和(避免再次重复每个CASE语句)


还请注意,如果您已经具备了
serv1='Speech Language Therapy'
的条件,则无需检查
serv1是否不为NULL,您可以重新编写SQL,使其类似于:

WITH CTE AS (
    SELECT [School Name],
       SUM(CASE WHEN serv1 = 'Speech Language Therapy' THEN mins1 ELSE 0 END) as mins1
      ,SUM(CASE WHEN serv2 = 'Speech Language Therapy' THEN mins2 ELSE 0 END) as mins2
      ,SUM(CASE WHEN serv3 = 'Speech Language Therapy' THEN mins3 ELSE 0 END) as mins3
      ,SUM(CASE WHEN serv4 = 'Speech Language Therapy' THEN mins4 ELSE 0 END) as mins4
    FROM [dbo].[George].[TEST_TEMP_TABLE]
    GROUP BY [School Name]
)
SELECT [School Name]
    , mins1, mins2, mins3, mins4
    , mins1 + mins2 + mins3 + mins4 as Minutes
FROM cte
ORDER BY [School Name]
SELECT [School Name],
   SUM(coalesce(mins1,0)) as mins1total,
   SUM(coalesce(mins2,0)) as mins2total,
   SUM(coalesce(mins3,0)) as mins3total,
   SUM(coalesce(mins4,0)) as mins4total,
   SUM(coalesce(min1,0) + coalesce(min2,0) + coalesce(min3,0) + coalesce(min4,0)) as alltotal
 FROM [dbo].[George].[TEST_TEMP_TABLE]
 WHERE 
   serv1 = 'Speech Language Therapy'
   AND serv2 = 'Speech Language Therapy'
   AND serv3 = 'Speech Language Therapy'
   AND serv4 = 'Speech Language Therapy'
GROUP BY [School Name]
ORDER BY [School Name]

执行
从test_temp_表中选择*,其中serv1='Speech…'和serv2='Speech…'以及serv3='Speech…'和serv4='Speech…'
并查看min1、min2、min3和min4列是否有数据。这里根本不清楚您要做什么。您是否意识到,检查给定字符串以及它是否也不为NULL是多余的。没有可以同时为NULL和“语音语言治疗”的字符串值。我有一种感觉,你想用或代替,但谁知道呢。