7
votes

SQL Comptez la ligne en double en tant que célibataire

J'ai une table xxx

j'ai besoin de résultat comme xxx

ici, actif et et Inactifs Les champs sont la somme des champs Status en fonction de 0 ou 1

Cela signifie ici État pour Gujarat, trois fois 0 est survenu, mais Deux lignes en double pour StationCode - 12345 . Cela signifie qu'il sera considéré comme un .

J'ai une requête comme ci-dessous xxx

mais je suis incapable de compter duplicata StationCode Single.

Comment puis-je faire ça?

sql

2 commentaires

Filtrez les rangées dans une sous-requête, vérifiez ma réponse ci-dessous.


Dupliqué possible de compter et avoir requis


5 Réponses :


4
votes

Vous pouvez filtrer de manière unique les rangées dans une sous-requête. essayez, xxx

sqlfiddle Demo < / a>


0 commentaires

0
votes

Récupérez d'abord les tulets distincts de (état, district, statut), puis exécutez votre requête d'agrégation sur le dessus, comme ceci:

SELECT 
    a.state,
    a.District,
    SUM(
        Case 
        when a.Status=0 then 1 
        else 0 end
        ) AS Active,
    SUM(
        Case 
            when a.Status=1 then 1 
            else 0 
        end
        ) AS InActive 
from 
    (
        SELECT DISTINCT 
            state, 
            district, 
            status 
        FROM 
            Station_Master 
    ) as a
group by a.state, a.District


1 commentaires

Il va être "actif" de la colonne comme pour le district Gujarat et Taluka Banaskantha, mais j'en ai besoin 2 parce que l'état de Gujarat ayant 3 comptes actifs, mais il y a deux rangées qui ont le même code de station afin que cela soit considéré comme un, de sorte qu'il sera donc considéré comme un. 2.



1
votes

Je pense que cela traiterait probablement de votre problème. Je ne suis pas sûr à 100% de la syntaxe, mais si vous pouvez l'essayer et laissez-moi savoir si cela ne fonctionne pas, je peux essayer de le modifier pour vous. L'idée est de créer une table dérivée à l'aide de groupe en éliminant les duplicats que vous ne voulez pas d'abord, puis la requête extérieure est identique à celle de votre requête d'origine - juste sur la table dérivée.

SELECT Distinct 
  X.State, 
  X.District, 
  SUM(Case when X.Status=0 then 1 else 0 end) AS Active,
  SUM(Case when X.Status=1 then 1 else 0 end) AS InActive
FROM 
  (Select State, District, StationCode, Status
   From Station_Master 
   Group By State,District, StationCode, Status) as X
GROUP BY X.State, X.District


0 commentaires


1
votes

Veuillez utiliser le ci-dessous SQL:

declare @temptable table 
(
Id int,
state nvarchar(250),
District nvarchar(250),
StationCode nvarchar(250),
Status bit
)
Insert into @temptable values  (1,'Gujarat','Banaskantha','12345',0 )
Insert into @temptable values  (2,'Gujarat','Banaskantha','12345',0 )
Insert into @temptable values  (3,'M.P.','Bhopal','22315',1 )
Insert into @temptable values  (4,'Gujarat','Banaskantha','12349',0 )
Insert into @temptable values  (5,'Gujarat','Banaskantha','12345',1 )

select  tbl.state,tbl.District,SUM(cast(tbl.Status as int)) as Active ,(Count(*) -   
    SUM(cast(tbl.Status as int))) as InActive  
from (select distinct state,District,StationCode,Status from @temptable)as tbl 
group by tbl.state,tbl.District


0 commentaires