7

私はテーブルを持っています

ID     State        District        StationCode        Status
---------------------------------------------------------------
 1    Gujarat       Banaskantha      12345               0 
 2    Gujarat       Banaskantha      12345               0
 3    M.P.          Bhopal           22315               1
 4    Gujarat       Banaskantha      12349               0
 5    Gujarat       Banaskantha      12345               1

次のような結果が必要です

State      District       Active       InActive
-----------------------------------------------
Gujarat     Banaskantha      2            1
M.P.        Bhopal           0            1

ここで、Active およびフィールドはまたはに基づくフィールドInactiveの合計ですStatus01

つまりState、ここグジャラート語では が発生しましたが、 の行がthree重複しています。とみなされるということです。0twoStationCode - 12345One

以下のようなクエリがあります

select distinct 
    state,
    District,
    SUM(
        Case 
        when Status=0 then 1 
        else 0 end
        ) AS Active,
    SUM(
        Case 
            when Status=1 then 1 
            else 0 
        end
        ) AS InActive 
from 
    Station_Master 
group by state, District

しかし、重複StationCode行をシングルとしてカウントできません。

どうやってやるの ?

4

5 に答える 5

4

サブクエリで行を一意にフィルタリングできます。試す、

SELECT  DISTINCT state, district,
        SUM(CASE WHEN status = 0 THEN 1 ELSE 0 END) Active,
        SUM(CASE WHEN status = 1 THEN 1 ELSE 0 END) InActive
FROM (
        SELECT DISTINCT state,  district, StationCode, status 
        FROM  Station_Master
    ) a
GROUP BY state, district

SQLFiddle デモ

于 2012-09-13T05:02:43.267 に答える
2

サブクエリからデータをフェッチする前に、サブクエリでDISTINCT句または句を使用する必要があります。GROUP BY

DISTINCT句の使用:

SELECT  DISTINCT state, district,
        SUM(CASE WHEN status = 0 THEN 1 ELSE 0 END) Active,
        SUM(CASE WHEN status = 1 THEN 1 ELSE 0 END) InActive
FROM (
        SELECT DISTINCT state,  district, StationCode, status 
        FROM  Station_Master
     ) A
GROUP BY state, district;

GROUP BY句の使用:

SELECT 
    state,
    District,
    SUM(Case when Status=0 then 1 else 0 end) AS Active,
    SUM(Case when Status=1 then 1 else 0 end) AS InActive 
FROM
(
    SELECT state,District,StationCode,Status
    FROM Station_Master 
    GROUP BY state, District, Stationcode,Status
) A
GROUP BY state, District;

このSQLFiddleを参照してください

また、このSQLFiddleのクエリを確認するために、テーブルにいくつかのレコードを追加しました。そしてうまくいきました。

于 2012-09-13T05:50:10.767 に答える
1

以下の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
于 2012-09-13T06:08:11.877 に答える
1

これはおそらくあなたの問題に対処すると思います。構文について 100% 確信があるわけではありませんが、試してみて、うまくいかない場合はお知らせいただければ、微調整を試みます。アイデアは、Group By を使用して派生テーブルを作成し、最初に不要な重複を排除することです。その後、外側のクエリは元のクエリと同じになります。代わりに、派生テーブルのみです。

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
于 2012-09-13T05:11:33.797 に答える
0

最初に (State、District、Status) の個別のタプルを取得してから、次のように集計クエリを実行します。

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
于 2012-09-13T05:04:35.597 に答える