Har ett litet problem med en SELECT sats i MSSQL 2008 Express Det går väl att slänga på en extra fråga bara? Nej du kan inte göra så, alias är bara "synliga" i ORDER BY precis som du skrev. Det beror nog på tycke och smak vad man tycker är "enklare". Tänkte inte på att slänga på en extra fråga som Niklas föreslog sen får jag se om jag använder JOIN versionen eller inte.MSSQL Select och addera Alias värden
Den här fungerar bra
<code>
SELECT VerkID,
(SELECT SUM(columnX) AS Expr1
FROM Table1
WHERE (t3.VerkID = VerkID)) AS Sum1,
(SELECT SUM(columnY) AS Expr1
FROM Table2
WHERE (t3.VerkID = VerkID)) AS Sum2
FROM Table3 AS t3
</code>
men jag vill även lägga till en total, Sum1 + Sum2, men får då ett felmeddelande som säger att det är "invalid column name". Går det inte att använda Alias-namnen på så sätt i Select-uttrycket? Det går ju att använda dem i t ex Order By Sum1
<code>
SELECT VerkID,
(SELECT SUM(columnX) AS Expr1
FROM Table1
WHERE (t3.VerkID = VerkID)) AS Sum1,
(SELECT SUM(columnY) AS Expr1
FROM Table2
WHERE (t3.VerkID = VerkID)) AS Sum2,
(Sum1 + Sum2) AS Total
FROM Table3 AS t3
</code>Sv: MSSQL Select och addera Alias värden
SELECT Sum1, Sum2, (Sum1 + Sum2) AS Total
FROM (SELECT VerkID,
(SELECT SUM(columnX) AS Expr1
FROM Table1
WHERE (t3.VerkID = VerkID)) AS Sum1,
(SELECT SUM(columnY) AS Expr1
FROM Table2
WHERE (t3.VerkID = VerkID)) AS Sum2,
FROM Table3 AS t3)
Sen föredrar jag ju personligen att inte lägga anrop i kolumnangivelserna. Har du någon speciell anledning, för annars borde du väl kunna göra den första delen med två joinar istället?
SELECT t3.VerkID, t1.sum As Sum1, t2.sum as Sum2
FROM ((table3 as t3 LEFT JOIN
(SELECT VerkID, SUM(ColumnX) FROM table1 GROUP BY VerkID) AS t1) LEFT JOIN
(SELECT VerkID, SUM(ColumnY) FROM table2 GROUP BY VerkID) AS t2)
Sv: MSSQL Select och addera Alias värden
För att slippa dubblera koden så kan du använda en CTE (ommon Table Expression).
<code>
; WITH GetSum AS
(
SELECT
VerkID,
(SELECT SUM(columnX) FROM Table1 WHERE (t3.VerkID = VerkID)) AS Sum1,
(SELECT SUM(columnY) FROM Table2 WHERE (t3.VerkID = VerkID)) AS Sum2
FROM Table3 AS t3
)
SELECT VerkID, Sum1, Sum2, Sum1 + Sum2 AS Total FROM GetSum;
</code> Sv: MSSQL Select och addera Alias värden
Båda (ditt första exempel) gör jobbet.
Men man spar ju ca 15 - 20 tecken på ditt förslag (om det nu var det som var enklare??).
För övrigt så behöver man ta bort ett komma,
och lägga till ett alias på den yttre för att ditt förslag ska "flyga".
Båda ger också samma exekverings plan.
:-)Sv: MSSQL Select och addera Alias värden
Nu har man lärt sig något nytt igen.
Tack för hjälpen och God Jul