SQL输出基于子查询的列名

时间:2013-03-18 23:38:47

标签: sql calculated-columns

我想通过执行以下操作获取查询输出的列名:

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中是否可能,或者我是否需要以其他方式处理查询的输出?

注意: 我无法假设我知道输出的队列名称。

1 个答案:

答案 0 :(得分:1)

根据您的RDMBS,这是使用MAXCASE的一个附件:

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 Fiddle Demo

您可能需要更新一些字段名称 - 我猜了几个。上面的SQL Fiddle应该会让你朝着正确的方向前进。

- 编辑 -

鉴于您最近的编辑,如果您不知道queuenames(意味着您不知道要返回多少列),那么这开始听起来更像是演示文稿问题而不是数据库问题。您也许可以使用动态SQL来实现结果,但同样,您最好在UI端进行,而不是使用DAL方面。