2009-10-15 6 views
1

Je veux créer un simple rapport de synthèse des services de rapports à l'aide age, account et age group comme suit:Résumer données pour le rapport à l'aide T-SQL Case Déclaration

SELECT AGE,COUNT(ACCOUNT)AS TOTALCASES, 
     'AGEGRP' =CASE WHEN AGE <=5 THEN 'AGE 0 TO 5' 
         WHEN AGE >=6 THEN 'AGE 6 AND OLDER' 
       END 
FROM MAIN 
GROUP BY 'AGEGRP' 

Quand je lance ceci dans SQL Server Management Studio, Je reçois un message d'erreur:

Msg 164, Level 15, State 1, Line 1 Each GROUP BY expression must contain 
at least one column that is not an outer reference. 

quelqu'un peut-il suggérer une façon de produire des données résumées, en comptant le numéro de compte, résumant par age 0 to 5 et age 6 and older?

Répondre

3

vous ne pouvez pas avoir "âge" dans la liste de sélection si vous regroupez par AGEGRP

essayer:

DECLARE @YourTable table (age int, account int) 
insert into @YourTable values (1,40) 
insert into @YourTable values (2,40) 
insert into @YourTable values (3,40) 
insert into @YourTable values (4,40) 
insert into @YourTable values (5,40) 
insert into @YourTable values (6,40) 
insert into @YourTable values (7,40) 
insert into @YourTable values (8,40) 

SELECT 
    COUNT(ACCOUNT)AS TOTALCASES, AGEGRP 
    FROM (SELECT 
       AGE,ACCOUNT, CASE 
           WHEN AGE <=5 THEN 'AGE 0 TO 5' 
           WHEN AGE >=6 THEN 'AGE 6 AND OLDER' 
          END AS AGEGRP 
       FROM @YourTable 
     )dt 
    GROUP BY AGEGRP 

SORTIE:

TOTALCASES AGEGRP 
----------- --------------- 
5   AGE 0 TO 5 
3   AGE 6 AND OLDER 

(2 row(s) affected) 
0

Soit vous faites une requête interne, comme les émissions de KM, ou vous répétez l'expression que vous souhaitez regrouper par:

SELECT 
    AGE, 
    COUNT(ACCOUNT) AS TOTALCASES, 
    CASE 
    WHEN AGE <=5 THEN 'AGE 0 TO 5' 
    ELSE 'AGE 6 AND OLDER' 
    END AS AGEGRP 
FROM 
    MAIN 
GROUP BY 
    CASE 
    WHEN AGE <=5 THEN 'AGE 0 TO 5' 
    ELSE 'AGE 6 AND OLDER' 
    END 
0

Il est impossible d'avoir AGE dans le jeu de résultats final. Je pense que vous mélangez deux demandes ensemble. Prenant la solution de KM, vous pouvez avoir le résultat interne, ou le résultat externe sans la colonne AGE.

EDIT: KM vient de modifier sa réponse, moi aussi :) Quoi qu'il en soit, je référencez les deux résultats suivants:

  1. âge select (cas ... fin) comme agegroup du principal
  2. sélectionner le groupe d'âge, compter (*) comme cas de (sélectionner l'âge, (cas ... fin) comme groupe d'âge) t groupe par groupe d'âge
Questions connexes