2015-08-10 40 views
7

SQL için yeni.SQL: GROUP CASE deyimi ile birden çok sütun BY

@myboolean doğruysa, CASE ifade ile GROUP BY bildirimini kullanmak istiyorum.

Tek bir alanda, ya da nasıl bir CASE açıklamada olmadan birden alanları ile GROUP BY kullanımı ile GROUP BY ve CASE BY nasıl kullanılacağına ilişkin birçok örnek gördük.

İkisini nasıl birleştireceğimi bilmiyorum.

Incorrect syntax near ','

Yani, bu işler:

GROUP BY 
CASE WHEN (@myboolean=1) 
    THEN 
    field1, <-- ERROR HERE: Incorrect syntax near ',' 
    field2, 
    field3, 
    field4 
    ELSE 
    field1 
    END 

I: Bu bir sözdizimi hatası üretir

GROUP BY 
/* This works with no enclosing CASE statement */ 
field1, 
field2, 
field3, 
field4 

Ben CASE ifadesi içindeki GROUP BY alanları içine, ben bir sözdizimi hatası alıyorum Bu sorulara zaten göz attınız:

az alakalı

  • çeşitli başkalarını, GROUP BY fıkrada bir olgu deyimi içerir nasıl göremiyorum Microsoft SQL Server Management Studio.

    Çok fazla değişiklik yapılmasını önlemek istediğim çok karmaşık/uzun bir SQL deyimini miras aldığımı lütfen unutmayın. Sorguyu iki ayrı SELECT ifadesine bölmek istemiyorum.

  • +0

    Olgu yalnızca birkaç değil, bir sütun/değer döndürebilir. – jarlh

    +0

    @jarlh Teşekkürler. Bunun yerine ne yapmalıyım? –

    +0

    CASE, beklediğiniz gibi çalışmaz – mxix

    cevap

    8

    Sen kullanabilirsiniz ...

    GROUP BY field1, 
        CASE WHEN @myboolean=1 THEN field2 END, 
        CASE WHEN @myboolean=1 THEN field3 END, 
        CASE WHEN @myboolean=1 THEN field4 END 
    

    @myboolean Eğer sonucu etkilemez NULL olarak değerlendirilir 1 değildir.

    Bir saklı yordamda bulunuyorsa, bir IF kullanabilirsiniz.

    +0

    @myboolean 1 olacaksa, o zaman tüm bu durumda durumu doğru mu? –

    +0

    @RahulDubey: '' myboolean' '' 1' ise 'CASE'' true' olarak değerlendirir ve 'THEN' cümlesi, 'field2', field3' ya da field4' olarak tanımlanan ifadeyi döndürür. –

    +0

    gerçekten hoşunuza gitti.Teşekkür ederiz. –

    1

    Bu şekilde deneyebilirsiniz:

    IF (@myboolean=1) 
    BEGIN 
    SELECT 
    field1, 
    field2, 
    field3, 
    field4 
    FROM myTable 
    GROUP BY 
    field1, 
    field2, 
    field3, 
    field4 
    
    END 
    ELSE 
    BEGIN 
    SELECT 
    field1 
    FROM myTable 
    GROUP BY 
    field1 
    END