Sql server 汇总SQL表
我有一个SQL表,看起来像这样: 表定义: 创建表TestSessions Id整数标识1,1主键不为null,TestUser varchar50不为null,Department varchar50不为null,Project varchar50不为null,TestDateTime varchar50不为null,Score varchar50不为null,Pass varchar50不为null 我想按TestUser对表进行分组,并分别计算每个TestUser的每个通过和失败值,使其看起来像: SQL命令:按TestUser从TestSessions组中选择TestUser,当[Score]=“通过”时选择SUMCASE,然后选择1 ELSE 0结束[Pass],当[Score]=“失败”时选择SUMCASE,然后选择1 ELSE 0结束[Fail] 返回: 我怎样才能解决这个问题 然后我想计算通过和失败之间的比率Sql server 汇总SQL表,sql-server,tsql,Sql Server,Tsql,我有一个SQL表,看起来像这样: 表定义: 创建表TestSessions Id整数标识1,1主键不为null,TestUser varchar50不为null,Department varchar50不为null,Project varchar50不为null,TestDateTime varchar50不为null,Score varchar50不为null,Pass varchar50不为null 我想按TestUser对表进行分组,并分别计算每个TestUser的每个通过和失败值,使其看
在一个语句中是否可以实现这一点?您需要一个简单的聚合和大小写表达式:
SELECT Color,
SUM(CASE WHEN [BOOL] = 'TRUE' THEN 1 ELSE 0 END) [True],
SUM(CASE WHEN [BOOL] = 'FALSE' THEN 1 ELSE 0 END) [False]
FROM dbo.YourTable
GROUP BY Color;
这假设BOOL的数据类型是varchar,如果是bit,则需要执行以下操作:
SELECT Color,
SUM(CASE WHEN [BOOL] = 1 THEN 1 ELSE 0 END) [True],
SUM(CASE WHEN [BOOL] = 0 THEN 1 ELSE 0 END) [False]
FROM dbo.YourTable
GROUP BY Color;
首先,您的案例应该检查[Score]列而不是[Score],因为[Score]从不包含通过或失败。其次,您可以尝试围绕它编写一个cte,如下所示:
WITH cte AS (
SELECT TestUser
,Department
,CASE WHEN [Pass] = 'Pass' THEN 1 ELSE 0 END [Passed]
,CASE WHEN[Pass] = 'Fail' THEN 1 ELSE 0 END [Failed]
FROM TestSessions
)
SELECT TestUser
,Department
,sum([Passed]) [Pass]
,sum([Failed]) [Fail]
FROM cte
GROUP BY TestUser, Department
我得到的回报是零。应该有总数。请像对待字符串varchar一样对待true和false。@LadislavBiskupec正如我在回答中所说的,这取决于BOOL列的数据类型。第一个代码将它们视为varchar,第二个代码视为bitTtry,将cte作为selecttestuser,CASE…END作为Pass,…,在其周围放置一个cte。。。。根据这个查询,计算例子中提到的和。据我记忆所及,SQL Server在计算案例结果时表现有点糟糕。对不起,我指的是cte和SUMTSIDE中的案例。。。如下所示:将cte设置为SELECT TestUser,Department,CASE WHEN[Pass]=“Pass”然后1 ELSE 0 END[Passed],CASE WHEN[Pass]=“Fail”然后1 ELSE 0 END[Failed]从TestSessions中选择TestUser,Department,sum[Passed][Pass],sum[Failed][Fail]从cte组中按TestUser,Department复制我的完整查询吗?我改变了你的专栏;你检查了列分数,但你应该检查列通过,因为从来没有通过或不通过的分数