添加和函数SQL Server 2012
我需要将不同列中的这些分钟加在一起,但当我尝试运行此语句时,我只看到空白。我已经尝试了很多东西,我认为它在where子句中。我将添加在4列以上一旦这是工作添加和函数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].
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和“语音语言治疗”的字符串值。我有一种感觉,你想用或代替,但谁知道呢。