我需要根据列名生成别名,如下面的查询所示。 请建议如何实现这一目标。我将在存储过程中使用它。
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
答案 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?