列根据列值生成别名

时间:2016-05-24 01:12:59

标签: sql stored-procedures

我需要根据列名生成别名,如下面的查询所示。 请建议如何实现这一目标。我将在存储过程中使用它。

select N.ipAddress,

(case when sid = 185 and M.rid = 13785 then M.avg else 0 end) as {R.name + M.name},
(case when sid = 187 and M.rid = 13753 then M.avg else 0 end) as {R.name + M.name}

from statsTable as M,ipTable as N, resTable as R where M.rid in (13784,13751,13745,13746,13753,13748,13785) and M.sid in (185,187)  and R.ipAddress = N.ipAddress and M.rid = R.rid and M.timestamp = 1463855400 group by N.ipAddress,M.sid

1 个答案:

答案 0 :(得分:0)

我假设你遇到的问题是你需要在程序内部使用M.avg(如果是这样的话,则为零)以及R.name + M.name。

如果是这种情况,您将需要两个不同的列,一个用于值,另一个用于名称,因此这将是

的方式
select N.ipAddress,

(case when sid = 185 and M.rid = 13785 then M.avg else 0 end) as value,
 {R.name + M.name} as name

from statsTable as M,ipTable as N, resTable as R where M.rid in (13784,13751,13745,13746,13753,13748,13785) and M.sid in (185,187)  and R.ipAddress = N.ipAddress and M.rid = R.rid and M.timestamp = 1463855400 group by N.ipAddress,M.sid

我不确定sql中的括号,但我认为你的sql引擎允许这样做。

通过这种方法,您将能够在一个程序中阅读它。

如果你需要转置结果,那么你需要一个支点,这是一个相关的帖子 Simple way to transpose columns and rows in Sql?