2014-01-09 31 views
0

這是遵循從我剛纔的問題 了這裏的the link計算權重。在多標準表中的

我能夠但是以檢索在單個列級權重,當我試圖做同樣的一組I級運行下面的問題是我的代碼來達到同樣的

SELECT 
    a.`Srvy_Cty`, 
    a.`Total` AS num, 
    -- sum(b.total) as gt, 
    b.total AS den , 
    (a.total /b.total)*100 AS Wt, 
    a.`Sntmt`, 
    a.score 

    FROM Subctylst A 
    JOIN Subctylst b 
    ON A.srvy_cty = B.srvy_cty AND A.cty_rgn = B.cty_rgn 
    WHERE a.sntmt = 'All' AND B.score = 2000 
    GROUP BY a.srvy_cty, a.cty_rgn, a.sntmt 

請找到fiddle數據和查詢,請指導我解決這個

期望的結果

+-----------+-------------------------------+-------+-------+----------+----------+ 
    | Srvy_Cty |   Cty_Rgn   | Total | Sntmt | score | dsrd O/c | 
    +-----------+-------------------------------+-------+-------+----------+----------+ 
    | ALL  | ALL       | 3677 | ALL | 2000  |   | 
    | Bangalore | ALL       | 628 | ALL | 2000  | 100  | 
    | Bangalore | CBD AND off CBD - Bangalore |  7 | D  | \N  |   | 
    | Bangalore | CBD AND off CBD - Bangalore |  4 | I  | \N  |   | 
    | Bangalore | CBD AND off CBD - Bangalore |  5 | S  | \N  |   | 
    | Bangalore | CBD AND off CBD - Bangalore | 16 | ALL | 87.1094 | 2.55  | 
    | Bangalore | East & South East Bangalore | 91 | D  | \N  |   | 
    | Bangalore | East & South East Bangalore | 82 | I  | \N  |   | 
    | Bangalore | East & South East Bangalore | 18 | S  | \N  |   | 
    | Bangalore | East & South East Bangalore | 191 | ALL | 95.732 | 30.41 | 
    | Bangalore | North & North East Bangalore | 58 | D  | \N  |   | 
    | Bangalore | North & North East Bangalore | 85 | I  | \N  |   | 
    | Bangalore | North & North East Bangalore | 19 | S  | \N  |   | 
    | Bangalore | North & North East Bangalore | 162 | ALL | 114.7119 | 25.80 | 
    | Bangalore | South Bangalore    | 77 | D  | \N  |   | 
    | Bangalore | South Bangalore    | 105 | I  | \N  |   | 
    | Bangalore | South Bangalore    | 24 | S  | \N  |   | 
    | Bangalore | South Bangalore    | 206 | ALL | 112.0087 | 32.80 | 
    | Bangalore | West AND North West Bangalore | 25 | D  | \N  |   | 
    | Bangalore | West AND North West Bangalore | 25 | I  | \N  |   | 
    | Bangalore | West AND North West Bangalore |  3 | S  | \N  |   | 
    | Bangalore | West AND North West Bangalore | 53 | ALL | 100  | 8.44  | 
    | Calcutta | ALL       | 522 | ALL | 2000  | 100.00 | 
    | Calcutta | Central Pune     | 20 | D  | \N  |   | 
    | Calcutta | Central Pune     | 22 | I  | \N  |   | 
    | Calcutta | Central Pune     |  6 | S  | \N  |   | 
    | Calcutta | Central Pune     | 48 | ALL | 103.6458 | 9.20  | 
    | Calcutta | East Pune      | 62 | D  | \N  |   | 
    | Calcutta | East Pune      | 64 | I  | \N  |   | 
    | Calcutta | East Pune      |  8 | S  | \N  |   | 
    | Calcutta | East Pune      | 134 | ALL | 101.4034 | 25.67 | 
    | Calcutta | North Pune     | 34 | D  | \N  |   | 
    | Calcutta | North Pune     | 25 | I  | \N  |   | 
    | Calcutta | North Pune     | 11 | S  | \N  |   | 
    | Calcutta | North Pune     | 70 | ALL | 89.1633 | 13.41 | 
    | Calcutta | South Pune     | 30 | D  | \N  |   | 
    | Calcutta | South Pune     | 17 | I  | \N  |   | 
    | Calcutta | South Pune     |  5 | S  | \N  |   | 
    | Calcutta | South Pune     | 52 | ALL | 77.4038 | 9.96  | 
    | Calcutta | West Pune      | 115 | D  | \N  |   | 
    | Calcutta | West Pune      | 81 | I  | \N  |   | 
    | Calcutta | West Pune      | 22 | S  | \N  |   | 
    | Calcutta | West Pune      | 218 | ALL | 85.9776 | 41.76 | 
    | Chennai | ALL       | 337 | ALL | 2000  |   | 
    | Chennai | Central Chennai    | 24 | D  | \N  |   | 
    | Chennai | Central Chennai    | 11 | I  | \N  |   | 
    | Chennai | Central Chennai    |  2 | S  | \N  |   | 
    | Chennai | Central Chennai    | 37 | ALL | 66.7641 | 7.09  | 
    | Chennai | North Chennai     | 11 | D  | \N  |   | 
    | Chennai | North Chennai     | 17 | I  | \N  |   | 
    | Chennai | North Chennai     |  2 | S  | \N  |   | 
    | Chennai | North Chennai     | 30 | ALL | 118.6667 | 5.75  | 
    | Chennai | South Chennai     | 113 | D  | \N  |   | 
    | Chennai | South Chennai     | 108 | I  | \N  |   | 
    | Chennai | South Chennai     | 28 | S  | \N  |   | 
    | Chennai | South Chennai     | 249 | ALL | 98.2178 | 47.70 | 
    | Chennai | West Chennai     |  7 | D  | \N  |   | 
    | Chennai | West Chennai     |  8 | I  | \N  |   | 
    | Chennai | West Chennai     |  6 | S  | \N  |   | 
    | Chennai | West Chennai     | 21 | ALL | 103.4014 | 4.02  | 
    +-----------+-------------------------------+-------+-------+----------+----------+ 
+0

做什麼你希望你的結果集看起來像? – AgRizzo

+0

道歉不清楚,問題中的表有一個名爲dsrd O/c的列,它是期望結果的簡稱,而不是[可點擊此處 - >小提琴](http://sqlfiddle.com/#!2/eac5ed/6) –

回答

0

因爲這是你第2個問題,2天內我會找到陳詞濫調的肥皂盒,以幫助你寫出更好的查詢。

  1. 除非存在集合函數(即SUM,MAX等),否則不要使用GROUP BY - 在上例中沒有使用該函數。
  2. 當您使用GROUP BY時,習慣於使用SELECT中不是聚合函數一部分的每個字段。

下面是解決方案。 。SQLFiddle

SELECT 
    a.`Srvy_Cty`, 
    a.`Cty_Rgn`, 
    a.`Total`, 
    a.`Sntmt`, 
    a.score, 
    ROUND(100.00 * a.`Total`/ b.`Total`, 2) as dsrd 
FROM Subctylst AS a 
LEFT JOIN Subctylst AS b 
    ON a.`Srvy_Cty` = b.`Srvy_Cty` 
    AND b.`Cty_Rgn` = 'All' 
     AND a.score <> '\N' 
ORDER BY a.`Srvy_Cty`, a.`Cty_Rgn` 

(這不是你的輸出完全一致。如果你不想要的第一條記錄的DSRD(即ALL ALL然後把這一條款的JOIN:AND a.Srvy_Cty <> 'ALL'

+0

感謝一噸的解決方案Agrizzo,我是這個環境的新手和你r指針可以幫助我理解機制......感謝您花時間指導我......歡呼:) –