2012-09-26 2 views
0

Mes résultats montrent les deux comptes les mêmes mais il devrait y avoir certains qui ont des comptes différents car CarCode est parfois nul.Compte basé sur Ou ne différencie pas le nombre

SELECT distinct car.carKey,    
    car.Weight, 
    car.CarCode, 
    COUNT(car.carKey)OVER(PARTITION BY car.carKey) AS TotalCarKeyCount, 
    COUNT(Case When (car.[Weight] IS not null) and (car.CarCode is null) as CarCountWithoutCode 
      then 0 
     else car.carKey End) OVER(PARTITION BY car.carKey) AS CarCount 
from car 

résultats montrent TotalCarKeyCount et CarCountWithoutCode toujours avec les mêmes chefs d'accusation comme la déclaration de cas ne fonctionne pas ou quelque chose.

+1

L'instruction 'de case' ne fait rien parce que vous avez enveloppé dans une fonction' count() '. Par exemple, 'select count (select 0)' renvoie toujours '1'. Les deux chemins de l'instruction 'case' renvoient' 1' ... Il semble que vous devriez utiliser 'sum (cas où car.weight n'est pas nul et car.carcode est nul alors 0 sinon 1 fin)'. Si c'est le cas, je posterai ceci comme une réponse afin que vous puissiez le corriger :). –

Répondre

0

Remplacez then 0 par then null. Les valeurs nulles sont comptées, les valeurs NULL ne le sont pas.

1

On dirait que vous pouvez utiliser à la place SUM():

SELECT distinct car.carKey,    
    car.Weight, 
    car.CarCode, 
    COUNT(car.carKey)OVER(PARTITION BY car.carKey) AS TotalCarKeyCount, 
    SUM(Case When (car.[Weight] IS not null) and (car.CarCode is null) as CarCountWithoutCode 
      then 0 else 1 End) OVER(PARTITION BY car.carKey) AS CarCount 
from car 

SQL Fiddle demo montrant la différence entre l'utilisation et COUNT()SUM():

create table test 
(
    id int 
); 

insert into test values 
(1), (null), (23), (4), (2); 

select 
    count(case when id is null then 0 else id end) [count], 
    sum(case when id is null then 0 else 1 end) [sum] 
from test; 

Count retourne 5 et Sum renvoie 4. Ou vous pouvez changer le COUNT() pour utiliser null et les valeurs null seront exclues en finale count()

select 
    count(case when id is null then null else id end) [count], 
    sum(case when id is null then 0 else 1 end) [sum] 
from test; 

Votre requête serait:

SELECT distinct car.carKey,    
    car.Weight, 
    car.CarCode, 
    COUNT(car.carKey)OVER(PARTITION BY car.carKey) AS TotalCarKeyCount, 
    COUNT(Case When (car.[Weight] IS not null) and (car.CarCode is null) as CarCountWithoutCode 
      then null else 1 End) OVER(PARTITION BY car.carKey) AS CarCount 
from car 
Questions connexes