1

次のようにして、クエリの出力の列名を取得したい:

SELECT      queuename
FROM        queue
WHERE     queue.queuename LIKE 'CLIENT VIP%' and queue.status = 1

行については、各キューの個別のユーザーを示したいと思います。

FROM         queue INNER JOIN
                      queue_users ON queue.queueid = queue_users.queueid INNER JOIN
                      users ON queue_users.userid = users.userid
WHERE     queue.queuename LIKE 'CLIENT VIP%' and queue.status = 1 and userstatus = 1

したがって、アウトプットについては、次のようなものになります。

User    QueueA  QueueB  QueueC
----------------------------------
Bob     Bob     Null    Bob
Joe     Joe     Joe     Joe
Bill    Bill    Null    Null

これはSQLでも可能ですか、それともクエリの出力を別のもので処理する必要がありますか?

注: 出力のキュー名を知っているとは限りません。

4

1 に答える 1

1

RDMBS に応じて、 and を使用した 1 つのアプローチを次に示しMAXますCASE

SELECT users.userid, 
    users.user,
    MAX(CASE WHEN queue.id = 'A' Then users.user END) QueueA,
    MAX(CASE WHEN queue.id = 'B' Then users.user END) QueueB,
    MAX(CASE WHEN queue.id = 'C' Then users.user END) QueueC
FROM         queue INNER JOIN
                      queue_users ON queue.queueid = queue_users.queueid INNER JOIN
                      users ON queue_users.userid = users.userid
WHERE     queue.queuename LIKE 'Otsuka VIP%' and queue.status = 1 and userstatus = 1
GROUP BY users.userid

SQL フィドルのデモ

フィールド名のいくつかを更新する必要があるかもしれません -- 私はいくつかを推測しました。ただし、上記の SQL Fiddle は正しい方向に導くはずです。

- 編集 -

最新の編集を考えると、キュー名がわからない場合 (つまり、返したい列の数がわからない場合)、これはデータベースの問題というよりもプレゼンテーションの問題のように聞こえ始めています。動的 SQL を使用して結果を達成することもできますが、DAL 側よりも UI 側で行う方がよいでしょう。

于 2013-03-18T23:44:05.613 に答える