J'ai une table j'ai besoin de résultat comme p> ici, Cela signifie ici J'ai une requête comme ci-dessous p> mais je suis incapable de compter duplicata Comment puis-je faire ça? p> p> actif code> et et Inactifs CODE> Les champs sont la somme des champs code> Status CODE> en fonction de 0 code> ou 1 code> p> État code> pour Gujarat, trois code> fois 0 code> est survenu, mais Deux code> lignes en double pour StationCode - 12345 Code> . Cela signifie qu'il sera considéré comme un code>. P> StationCode code> Single. P>
5 Réponses :
Vous pouvez filtrer de manière unique les rangées dans une sous-requête. essayez, sqlfiddle Demo em> < / a> h1> p>
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
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.
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
Vous devez utiliser Utilisation de à l'aide de J'ai aussi ajouté peu de documents dans le tableau pour vérifier La requête dans ce sqlfiddle. et a fonctionné bien. P> P> clause code> clause ou groupe par code> en sous-requête avant de récupérer les données de celui-ci: Distinct code> : p> groupe par code> Clause: p> Voir ce sqlfiddle em> h1>
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
Filtrez les rangées dans une sous-requête, vérifiez ma réponse ci-dessous.
Dupliqué possible de compter et avoir requis