2012-09-02 100 views
0

我需要運行一個查詢,查找不同類別的計數。例如: 比方說,路線編號:10,20,40分類在「短途路線」下,路線編號:「45,60和70」分類在「長途路線」下。不同的公共汽車通過這些路線中的一個或多個路線。包含「零記錄」信息的多個計數(*)的SQL

實施例:(A,B,C是總線號)

總線編號航線

  • 甲45
  • 乙40
  • 乙45
  • B 60
  • .一種20
  • C 70

我試圖寫的SQL查詢,其將返回類別每個總線簾布層不簾布層的計數(由該計數爲零指示類別): 即:

  • 巴士NO。短路線長路線
  • A 2 1
  • B 1 2
  • Ç0 1

該C不簾布層(0計數)上的短路線的信息是必要的。我怎樣才能讓我的查詢返回上面的結果?

謝謝!

回答

4

你可以使用case語句:

SELECT BusNo, 
    SUM (CASE WHEN Route in (10,20,40) THEN 1 ELSE 0 END)) AS ShortRoute, 
    SUM (CASE WHEN Route in (45,60,70) THEN 1 ELSE 0 END)) AS LongRoute 
FROM RoutesTable 
GROUP BY BusNo 

如果長/短路線信息包含在另一個表,讓我們說RouteInfo

SELECT BusNo, 
    SUM (CASE WHEN RouteInfo.Route = 'short' THEN 1 ELSE 0 END)) AS ShortRoute, 
    SUM (CASE WHEN RouteInfo.Route = 'long' THEN 1 ELSE 0 END)) AS LongRoute 
FROM RoutesTable 
    INNER JOIN RouteInfo ON RoutesTable.Route = RouteInfo.Route 
GROUP BY BusNo 
+1

謝謝dbaseman。你是男人! :) – user1639485

0

這個查詢應該讓你在正確的軌道上。它沒有被測試,尤其是沒有更多細節的數據庫,但是你需要根據公交車號碼進行分組,然後如果路線很短,你需要進行分組。

select BusNo, count(*) FROM Routes GROUP BY BusNo, isShortRoute 
0

您可以使用CASE分配該字段是否符合標準。在這種情況下,我們將檢查短路線是否小於或等於40,或者長路線是否大於或等於45.如果是,則將分配一個1。然後,我們採取短期和長期路線的SUM,你會得到你想要的結果。

SELECT bus_no AS 'Bus No', 
    SUM(CASE 
     WHEN route <= 40 THEN 1 ELSE 0 END) AS 'Short Route', 
    SUM(CASE 
     WHEN route >= 45 THEN 1 ELSE 0 END) AS 'Long Route' 
FROM bus GROUP BY bus_no 
相關問題