2010-10-26 11 views
1

Essayer d'obtenir une compréhension de base de T-SQL ici dans SQL Server 2008. Supposons que j'ai une table nommée « Questions » avec des colonnes telles que:valeurs Ajout d'une table dans SQL 2008

Priority User 
1  Foo 
1  Foo 
2  Foo 
5  Foo 
4  Bar 
5  Bar 
1  Bar 
1  Fuz 

et je souhaitez afficher un compte de la priorité pour chaque utilisateur, ainsi que la répartition de chaque priorité, de sorte que la table résultant pourrait être nommé « Breakdown » pourrait ressembler à

User Total 1 2 3 4 5 
Foo 4  2 1 0 0 1 
Bar 3  1 0 0 1 1 
Fuz 1  1 0 0 0 0 

Je pensais que je pourrais déclarer des variables et écrire ma requête quelque chose comme

DECLARE @P1 INT 
DECLARE @P2 INT 
DECLARE @P3 INT 
DECLARE @P4 INT 
DECLARE @P5 INT 

SELECT COUNT(id) AS Total,UserName, 
CASE Priority 
WHEN 1 Then @P1 = @P1 + 1 
WHEN 2 Then @P2 = @P2 + 1 
WHEN 3 Then @P3 = @P3 + 1 
WHEN 4 Then @P4 = @P4 + 1 
WHEN 5 Then @P5 = @P5 + 1 
END, 
FROM Breakdown 
GROUP BY UserName 

mais je suis sûr que je suis sur la mauvaise voie. Est-ce que quelqu'un a des suggestions?

Merci, et désolé pour la question noobish; mais je ne sais pas exactement quoi google pour ici ...

-R.

Répondre

4

Utilisation:

SELECT i.user, 
     COUNT(i.priority) AS total, 
     SUM(CASE WHEN i.priority = 1 THEN 1 ELSE 0 END) AS 1, 
     SUM(CASE WHEN i.priority = 2 THEN 1 ELSE 0 END) AS 2, 
     SUM(CASE WHEN i.priority = 3 THEN 1 ELSE 0 END) AS 3, 
     SUM(CASE WHEN i.priority = 4 THEN 1 ELSE 0 END) AS 4, 
     SUM(CASE WHEN i.priority = 5 THEN 1 ELSE 0 END) AS 5 
    FROM ISSUES i 
GROUP BY i.user 

Il est une requête de pivotement, la conversion de données de ligne en données de colonne.
Pas un problème noob/débutant à traiter. SQL Server 2005+ added the (now ANSI) PIVOT/UNPIVOT syntax, mais ceci est portable pour la plupart des bases de données (parce que peu d'entre elles supportent actuellement PIVOT/UNPIVOT).

+0

Merci beaucoup pour le conseil. J'essaie de m'améliorer avec un peu de SQL et je me suis amusé avec quelques exemples de bases de données pour un rapport SSRS. Merci encore pour l'aide à tous! – Randster

2

Vous devez sélectionner une colonne pour chaque colonne de votre jeu de résultats. Dans votre SQL, vous ne sélectionnez que trois colonnes. Essayez:

SELECT UserName, 
     Count(*) AS Total, 
     SUM(CASE Priority WHEN 1 THEN 1 ELSE 0 END) AS P1_Total, 
     SUM(CASE Priority WHEN 2 THEN 1 ELSE 0 END) AS P2_Total, 
     SUM(CASE Priority WHEN 3 THEN 1 ELSE 0 END) AS P3_Total, 
     SUM(CASE Priority WHEN 4 THEN 1 ELSE 0 END) AS P4_Total, 
     SUM(CASE Priority WHEN 5 THEN 1 ELSE 0 END) AS P5_Total 
FROM Issues 
GROUP BY UserName 
+0

Vous avez oublié le "END";) –

+0

Merci pour l'édition et l'ajout de l'instruction 'FIN'. J'ai été déconner dans SQL Management Studio et je me demandais pourquoi j'avais une erreur de syntaxe et essayait furieusement d'obtenir google pour m'aider. – Randster

+0

Pouvez-vous dire que je ne passe pas beaucoup de temps avec SQL Server? –