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,这是一种使用MAXand的方法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 来实现您的结果,但同样,您最好在 UI 端执行此操作而不是 DAL 端。

于 2013-03-18T23:44:05.613 回答