2012-03-31 92 views
2

MY_TABLE =帶2列的表格數字,城市。
所需輸出=城市和與城市相關的唯一編號的數量。西雅圖,貝爾維尤是Combined的一部分。即使有4個關聯到西雅圖號碼,貝爾維尤的輸出爲3,因爲只有3個不同的號碼 - 123,456,786Oracle Sql查詢按分組劃分

MY_TABLE 
Number City 
123 Seattle 
456 Bellevue 
789 LosAngeles 
780 LosAngeles 
123 Bellevue 
786 Bellevue 

所需的輸出:

Combined 3 
LosAngeles 2 

查詢到目前爲止:

SELECT NUMBER, CITY FROM MY_TABLE WHERE LOOKUP_ID=100 AND CITY IN 
('Seattle', 'Bellevue', 'LosAngeles') 
GROUP BY NUMBER, CITY 

如果有人提供相同的建議,我將非常感激。

回答

3

你可以做類似

SELECT (case when city IN ('Seattle', 'Bellevue') 
      then 'Combined' 
      else city 
      end) city, 
     count(distinct number) 
    FROM my_table 
WHERE lookup_id = 100 
    AND city IN ('Seattle', 'Bellevue', 'LosAngeles') 
GROUP BY (case when city IN ('Seattle', 'Bellevue') 
       then 'Combined' 
       else city 
      end) 

當然,我的猜測是,你有一些其他的表,告訴你哪個CITY值需要進行組合,而不是使用硬編碼CASE聲明。

1

試試這個:

SELECT 
    (CASE CITY 
    WHEN 'Seattle' THEN ‘Combined’ 
    WHEN 'Bellevue' THEN ‘Combined’ 
    ELSE CITY 
    END), COUNT(*) 
FROM 
    MY_TABLE 
WHERE 
    LOOKUP_ID=100 AND CITY IN ('Seattle', 'Bellevue', 'LosAngeles') 
GROUP BY 
    NUMBER, 
    (CASE CITY 
    WHEN 'Seattle' THEN ‘Combined’ 
    WHEN 'Bellevue' THEN ‘Combined’ 
    ELSE CITY 
    END) 

應該做你問什麼,但我懷疑你有你定義一些其他表哪些城市應被視爲是相同的,在這種情況下,你需要加入這些表

2
with t as (
SELECT (
     case when city IN ('Seattle', 'Bellevue') 
     then 'Combined' 
     else city 
     end 
    ) city, number from my_table 
) 
select city, count(distinct number) from t 
group by city 

泰爾請,如果它是有用的

+0

這是,謝謝! – 2012-04-01 01:03:09

1

有3個答案已經和他們都不是通用的更多城市。 試試這個:

SELECT City, COUNT(Number) AS ExclusiveNumbers 
FROM (SELECT q2.City, q2.CityNumCount, b.Number 
     FROM MY_Table b INNER JOIN 
      (SELECT c.City, MAX(NumOccurs) AS CityNumCount 
      FROM My_Table c INNER JOIN 
          (SELECT Number, COUNT(City) AS NumOccurs 
           FROM My_Table 
           GROUP BY Number) q1 ON c.Number = q1.Number 
      GROUP BY c.City) q2 ON b.City = q2.City) q3 
WHERE CityNumCount = 1 
GROUP BY City 
UNION 
SELECT 'Combined', COUNT(DISTINCT Number) 
FROM (SELECT q2.City, q2.CityNumCount, b.Number 
     FROM MY_Table b INNER JOIN 
      (SELECT c.City, MAX(NumOccurs) AS CityNumCount 
      FROM My_Table c INNER JOIN 
          (SELECT Number, COUNT(City) AS NumOccurs 
           FROM My_Table 
           GROUP BY Number) q1 ON c.Number = q1.Number 
      GROUP BY c.City) q2 ON b.City = q2.City) q3 
WHERE CityNumCount > 1 

工會的上半部分的作品出來,對於沒有共同的數字與其他任何城市,有多少不同的號碼都有每個城市的名字。
下半部分計算出與其他城市有共同數字的城市的不同數量。這兩個數字將始終合計爲原始表格中不同數字的計數。