新值下的SQL按结果集值分组
我希望将结果集中的某些值分组为新值 我的结果集是:新值下的SQL按结果集值分组,sql,sql-server-2008,group-by,resultset,Sql,Sql Server 2008,Group By,Resultset,我希望将结果集中的某些值分组为新值 我的结果集是: KS2 2a 3c 4c 3c 2a 2a 1c No KS2 1b 2c 5c 4c 底部组中的当前SQL将导致以下结果: KS2 2a 3c 4c 1c No KS2 1b 2c 5c 4c 我想将值1a、1b和1c分组为一行,在值1和2a、2b和2c下为2。所有其他值应正常分组。因此,我的结果集如下所示: KS2 2 3c 4c 1 No KS2 5c 4c 以下是我的代码: GROUP BY CASE Name WHEN
KS2
2a
3c
4c
3c
2a
2a
1c
No KS2
1b
2c
5c
4c
底部组中的当前SQL将导致以下结果:
KS2
2a
3c
4c
1c
No KS2
1b
2c
5c
4c
我想将值1a、1b和1c分组为一行,在值1和2a、2b和2c下为2。所有其他值应正常分组。因此,我的结果集如下所示:
KS2
2
3c
4c
1
No KS2
5c
4c
以下是我的代码:
GROUP BY
CASE Name
WHEN 'English' THEN
CASE WHEN [Ks2en]=NULL OR [Ks2en]='' THEN
'No KS2'
ELSE
[Ks2en]
END
WHEN 'Mathematics' THEN
CASE WHEN [Ks2ma]=NULL OR [Ks2ma]='' THEN
'No KS2'
ELSE
[Ks2ma]
END
ELSE
CASE WHEN [Ks2av]=NULL OR [Ks2av]='' THEN
'No KS2'
ELSE
[Ks2av]
END
END
编辑:以下是基于EricZ答案的解决方案:
GROUP BY
CASE Name
WHEN 'English' THEN
CASE WHEN [Ks2en] IS NULL OR [Ks2en]='' THEN
'No KS2'
WHEN [Ks2en] IN ('1a','1b','1c') THEN
'1'
WHEN [Ks2en] IN ('2a','2b','2c') THEN
'2'
ELSE
[Ks2en]
END
WHEN 'Mathematics' THEN
CASE WHEN [Ks2ma] IS NULL OR [Ks2ma]='' THEN
'No KS2'
WHEN [Ks2ma] IN ('1a','1b','1c') THEN
'1'
WHEN [Ks2ma] IN ('2a','2b','2c') THEN
'2'
ELSE
[Ks2ma]
END
ELSE
CASE WHEN [Ks2av] IS NULL OR [Ks2av]='' THEN
'No KS2'
WHEN [Ks2av] IN ('1a','1b','1c') THEN
'1'
WHEN [Ks2av] IN ('2a','2b','2c') THEN
'2'
ELSE
[Ks2av]
END
END
你想要这样的吗
GROUP BY
CASE
WHEN Name = 'English' THEN ISNULL(NULLIF([Ks2en],''),'No KS2')
WHEN Name = 'Mathematics' THEN ISNULL(NULLIF([Ks2ma],''),'No KS2')
WHEN [Ks2av] IN ('1a','1b','1c') THEN '1'
WHEN [Ks2av] IN ('2a','2b','2c') THEN '2'
ELSE ISNULL(NULLIF([Ks2av],''),'No KS2')
END
请注意,在您的代码中,您的
[Ks2en]=NULL
将始终返回false,您可以使用[Ks2en]IS NULL
检查NULL值您可以使用另一个表存储您的“分组行为”。这可能是一个两列的表,包含诸如('1a','1'),('1b','1'),('2a','2')等条目
这里有一个SQLFiddle,其中有一个示例:
您能分享完整的查询和数据示例吗?您分组的名称列是什么?@Mureinik-我已经为您添加了完整的查询。我分组的列是“KS2”,它是Ks2en、Ks2ma或Ks2av中的值,具体取决于SubjectName变量的内容。现在这就是我所说的作业安全性:)有时最好将查询分成多个较小的查询。@Trent注意,我明白了吗?嗨,EricZ,这是正确的。当[Ks2av]位于('1a'、'1b'、'1c')然后是'1'时,特别感兴趣的是
。我已经将其应用于我的代码,但是分组值从结果集中消失。我也接受了建议,我使用了它。我对另一个没有值的表进行了连接设置,所以我添加了值,结果显示ok。将连接更改为左连接,您的代码可以正常工作。谢谢