0

さまざまなカテゴリの数を見つけるクエリを実行する必要があります。例:たとえば、ルート番号:10、20、40は「ショートルート」に分類され、ルート番号:「45、60、70」は「ロングルート」に分類されます。さまざまなバスがこれらのルートの1つ以上を運行しています。

例:(A、B、Cはバス番号です)

バス番号ルート

  • A 10
  • 45
  • B 40
  • B 45
  • B 60
  • 20
  • C 70

バスがプライする、またはプライしないカテゴリの数を返すSQLクエリを作成しようとしています(そのカテゴリのカウントはゼロで示されます)。つまり、次のようになります。

  • バス番号 ショートルートロングルート
  • A 2 1
  • B 1 2
  • C 0 1

Cが短いルートでプライ(0カウント)しないという情報は必須です。上記の結果を返すクエリを取得するにはどうすればよいですか?

ありがとうございました!

4

3 に答える 3

4

ユースケースステートメントを使用できます。

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
于 2012-09-02T05:51:30.063 に答える
0

このクエリにより、正しい方向に進むことができます。特にデータベースの詳細がなければテストされませんが、バス番号でグループ化する必要があり、それが短いルートであるかどうかでグループ化する必要があります。

select BusNo, count(*) FROM Routes GROUP BY BusNo, isShortRoute
于 2012-09-02T05:50:31.750 に答える
0

CASEフィールドが基準に一致するかどうかを割り当てるために使用できます。この場合、短いルートが40以下であるかどうか、または長いルートが45以上であるかどうかを確認します。trueの場合、。が割り当てられます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
于 2012-09-02T05:58:25.683 に答える