SQL 分组依据 新值下的结果集值



我想将结果集中的某些值分组为新值。

例如,我的结果集是:

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

相关内容

  • 没有找到相关文章

最新更新