我想将结果集中的某些值分组为新值。
例如,我的结果集是:
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,其中有一个示例:http://sqlfiddle.com/#!2/deb87/7