0

これが私が持っているものの大まかな考えです:

+---------------+   +-----------------+    +---------------+
| customers     |   | transactions    |    | branches      |
+---------------+   +-----------------+    +---------------+
| customerid    |   | orderid         |    | branchid      |
|               |   | customerid (FK) |    |               | 
|               |   | branchid (FK)   |    |               | 
+---------------+   | datetime        |    +---------------+
                    +-----------------+

日/週/などのトランザクション数を取得するクエリを作成するにはどうすればよいですか? しかし、ブランチIDごとに個別に

私はこのような組合を試しました (すべての土曜日のみを数えます)。結果は得られますが、目的の形式ではありません。

SELECT COUNT(orderid) as count1 FROM transactions WHERE WEEKDAY(datetime) = 5 
AND branchid = 'branch1' 
UNION 
SELECT COUNT(orderid) as count2 FROM transactions WHERE WEEKDAY(datetime) = 5 
AND branchid = 'branch2'

戻り値:

+------------+
|   count1   |
+------------+
|        152 |
|         48 |
+------------+

データを次のようにフォーマットしたいのですが:

+------------+------------+
|   count1   |   count2   |
+------------+------------+
|        152 |         48 |
|            |            |
+------------+------------+

これを行う方法についてのヒントはありますか?前もって感謝します!

4

3 に答える 3

2

行ではなく列としてそれを望むのは奇妙ですが、これはあなたが必要とすることを行うべきだと思います:

SELECT
(SELECT COUNT(orderid) as count1 FROM transactions WHERE WEEKDAY(datetime) = 5 
AND branchid = 'branch1'),
(SELECT COUNT(orderid) as count1 FROM transactions WHERE WEEKDAY(datetime) = 5 
AND branchid = 'branch2')
于 2012-05-02T13:27:48.127 に答える
2

これを行うにはいくつかの方法があります。既にある を使用してUNION、サブクエリを中心にピボット クエリを作成できます。このバージョンは、name元の UNION の各列に静的を追加し、それらを使用しCASEて外側のクエリのステートメントを区別します。

あなたの場合、リスト内のサブセレクトで行うことができますがSELECT、この方法は他の種類のピボットクエリにより拡張可能であり、それらを達成するためのより一般的な規則です。

SELECT 
  SUM(CASE WHEN name = 'count1' THEN counts ELSE 0 END) AS count1,
  SUM(CASE WHEN name = 'count2' THEN counts ELSE 0 END) AS count2
FROM (
   SELECT 'count1' as name, COUNT(orderid) as counts FROM transactions WHERE WEEKDAY(datetime) = 5 
     AND branchid = 'branch1' 
   UNION 
   SELECT 'count2' as name, COUNT(orderid) as counts FROM transactions WHERE WEEKDAY(datetime) = 5 
     AND branchid = 'branch2'
) subq
于 2012-05-02T13:28:11.613 に答える
1

SELECT セクションで CASE を使用し、それが branch1 か branch2 かを確認します。SELECT では、それぞれに個別の列を定義できます。また、UNION を実行する必要はありません。GROUP BY branchid WHERE branchid in ('branch1','branch2') を実行できます。わかる?

于 2012-05-02T13:26:39.783 に答える