2

別のCALLで使用する出力を取得しようとしています。私が欲しい出力は

Row   |   Col   |  Data  |  Seq

<70%  | Voters  |  5519  |  8
<80%  | Voters  |  4352  |  8
<90%  | Voters  |  3251  |  8
100%  | Voters  |  2511  |  8

私が持っているコードは

SELECT CASE
        WHEN (poll_propensity >= 0.70 AND perm_absentee = 'N' AND mail_propensity = 0)  THEN '< 70%' 
        WHEN (poll_propensity >= 0.80 AND perm_absentee = 'N' AND mail_propensity = 0)  THEN '< 80%' 
        WHEN (poll_propensity >= 0.90 AND perm_absentee = 'N' AND mail_propensity = 0)  THEN '< 90%'
        WHEN (poll_propensity >= 1 AND perm_absentee = 'N' AND mail_propensity = 0)     THEN '100%' 
       END AS Row,            

'Voters' AS Col,
COUNT(voter_id) AS Data,
8 AS Seq

FROM (  SELECT p.voter_id, p.perm_absentee, vp.poll_propensity, vp.mail_propensity 
        FROM VoterProfile p
             INNER JOIN DistrictPrecinct d ON d.precinct_id=p.precinct_code 
             INNER JOIN VoterPropensity vp ON p.voter_id=vp.voter_id        
        WHERE d.district_id= 3 AND vp.election_type= 'T' ) as derived 
GROUP BY Row

しかし、出力を取得するすべてのimは次のようになります

Row   |   Col   |  Data  |  Seq

<70%  | Voters  |  5519  |  8

誰かがそれを助けることができれば、1つだけが通り抜けますそれは素晴らしいことです

4

2 に答える 2

2

1> .7であるため、WHENステートメントの順序を変更するだけです。1は.7にまとめられているため、.1から始めて、.7に進む必要があります。

SELECT CASE
        WHEN (poll_propensity >= 1 AND perm_absentee = 'N' AND mail_propensity = 0)     THEN '100%' 
        WHEN (poll_propensity >= 0.90 AND perm_absentee = 'N' AND mail_propensity = 0)  THEN '< 90%'
        WHEN (poll_propensity >= 0.80 AND perm_absentee = 'N' AND mail_propensity = 0)  THEN '< 80%' 
        WHEN (poll_propensity >= 0.70 AND perm_absentee = 'N' AND mail_propensity = 0)  THEN '< 70%' 
       END AS Row,            

'Voters' AS Col,
COUNT(voter_id) AS Data,
8 AS Seq

FROM (  SELECT p.voter_id, p.perm_absentee, vp.poll_propensity, vp.mail_propensity 
        FROM VoterProfile p
             INNER JOIN DistrictPrecinct d ON d.precinct_id=p.precinct_code 
             INNER JOIN VoterPropensity vp ON p.voter_id=vp.voter_id        
        WHERE d.district_id= 3 AND vp.election_type= 'T' ) as derived 
GROUP BY Row

または、操作を> =から<に変更して、順序を同じままにすることもできます。しかし、それがあなたが探しているのと同じサブセットをあなたに与えるかどうかはわかりません。

于 2013-02-11T22:54:53.913 に答える
0

次のようなステートメントから結果セットを返したいようです。

SELECT r.Row
     , 'Voters' AS Col
     , CASE r.Row
         WHEN '< 70%' THEN IFNULL(d.c70,0)
         WHEN '< 80%' THEN IFNULL(d.c80,0)
         WHEN '< 90%' THEN IFNULL(d.c90,0)
         WHEN '100%' THEN IFNULL(d.c100,0)
       END AS Data
     , 8 AS Seq
  FROM ( SELECT '< 70%' AS Row
         UNION ALL SELECT '< 80%' 
         UNION ALL SELECT '< 90%'
         UNION ALL SELECT '100%' 
       ) r
 CROSS
  JOIN ( SELECT SUM(vp.poll_propensity >= 0.70 AND vp.perm_absentee = 'N' AND vp.mail_propensity = 0) AS c70
              , SUM(vp.poll_propensity >= 0.80 AND vp.perm_absentee = 'N' AND vp.mail_propensity = 0) AS c80
              , SUM(vp.poll_propensity >= 0.90 AND vp.perm_absentee = 'N' AND vp.mail_propensity = 0) AS c90
              , SUM(vp.poll_propensity >= 1    AND vp.perm_absentee = 'N' AND vp.mail_propensity = 0) AS c100
              , COUNT(p.voter_id) AS count_voter_id
           FROM VoterProfile p
           JOIN DistrictPrecinct d ON d.precinct_id=p.precinct_code
           JOIN VoterPropensity vp ON p.voter_id=vp.voter_id
          WHERE d.district_id = 3
            AND vp.election_type = 'T'
       ) d
 ORDER BY r.Row

>= 0.70(比較を使用してからラベルのラベルを使用しているのは少し奇妙です。代わりに比較'< 70%'が必要なようです。<= 0.70

データから、カウントを集計する必要があるようです。poll_propensityが.85の有権者は、複数のカウントに含める必要があります。(あなたはそれを具体的に述べていませんが、それはあなたの期待される出力が私に示唆していることです。)

そうでない場合、指定されたパーセンテージの間の有権者だけの有権者数が必要な場合は、条件付きテストを調整して特定の範囲を確認します。例:

SUM(vp.poll_propensity >= 0.80 AND vp.poll_propensity < 0.90 
     AND vp.perm_absentee = 'N' AND vp.mail_propensity = 0) AS c80
于 2013-02-11T23:19:35.750 に答える