2016-05-24 8 views
-2

Ich muss Alias ​​basierend auf Spaltennamen generieren, wie in der folgenden Abfrage gezeigt. Bitte schlagen Sie vor, wie Sie dies erreichen können. Ich werde es in einer gespeicherten Prozedur verwenden.Generierung von Spaltenaliasnamen basierend auf Spaltenwerten

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

Welche Datenbank-Server verwenden Sie? – gxclarke

+0

Wie erwarten Sie einen anderen Spaltenalias pro Zeile? Deine Frage ergibt keinen Sinn. – Blorgbeard

Antwort

0

Ich gehe davon aus, dass das Problem, das Sie haben, ist, dass Sie diese M.avg innerhalb der Prozedur benötigt (oder Null, wenn es der Fall ist) und auch R.name + M.name.

Wenn dies der Fall ist, dass Sie zwei verschiedene Spalten benötigen, eine für den Wert und eine andere für den Namen, so wird dies die Art und Weise

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 

Ich bin nicht sicher über die Klammern in der SQL sein, Aber ich nehme an, dass das von Ihrer SQL-Engine erlaubt wird.

mit diesem Ansatz können Sie es in einer Prozedur lesen.

Wenn Sie das Ergebnis umsetzen müssen, dann werden Sie eine Pivot benötigen, ist dies ein Ergebniss zu Simple way to transpose columns and rows in Sql?

+0

Danke für die Antwort. Ich habe es auf ähnliche Weise mit Pivot gemacht. –

Verwandte Themen