2009-12-17 4 views
0

J'ai une table comme celle-ci;Table de tableau croisé dynamique

var1 var2 var3 cats 

a  b  b  cat1 
     b  b  cat1 
a      cat2 
a  a  a  cat3 
a  a  a  cat2 

et que vous voulez obtenir une table pivotante. Je veux compter a et b avec la catégorie des vars et des chats. Je suis un utilisateur d'Excel. Je l'ai regardé d'autres échantillons mais ne pouvait pas résoudre ce ... grâce à l'aide

vars cats a b 

var1 cat1 1 
var1 cat2 2 
var1 cat3 1 
var2 cat1  2 
var2 cat2 1 
var2 cat3 1 
var3 cat1  2 
var3 cat2 1 
var3 cat3 1 
+0

êtes dans SQL ou que vous êtes vous dans Excel. Si SQL, quelle base de données SQL? – bmargulies

+0

Dans la base de données sql standart. – qods

Répondre

1

Si vous utilisez Sql Server 2005 yuo peut utiliser la UNPIVOT

DECLARE @Table TABLE(
     var1 VARCHAR(10), 
     var2 VARCHAR(10), 
     var3 VARCHAR(10), 
     cats VARCHAR(10) 
) 


INSERT INTO @Table SELECT 'a','b','b','cat1' 
INSERT INTO @Table SELECT null,'b','b','cat1' 
INSERT INTO @Table SELECT 'a',null,null,'cat2' 
INSERT INTO @Table SELECT 'a','a','a','cat3' 
INSERT INTO @Table SELECT 'a','a','a','cat2' 

SELECT MyVars, 
     cats, 
     SUM(CASE WHEN Vars = 'a' THEN 1 ELSE 0 END) A, 
     SUM(CASE WHEN Vars = 'b' THEN 1 ELSE 0 END) B 
FROM (
      SELECT * 
      FROM (
         SELECT cats, 
           var1, 
           var2, 
           var3 
         FROM @Table 
        )p 
      UNPIVOT (Vars FOR MyVars IN (var1, var2,var3)) AS up 
     ) sub 
GROUP BY MyVars, 
     cats 
ORDER BY 1, 2 
Questions connexes