2016-11-15 4 views
2

Я расчета два ряда так:Сумма двух вычисляемых столбцов в SQL

CASE 
    WHEN isnumeric(SUBSTRING(dbo.Table.RNumber,1,CHARINDEX('+',dbo.Table.RNumber) - 1)) = 1 
     THEN SUBSTRING(dbo.Table.RNumber,1,CHARINDEX('+',dbo.Table.RNumber) - 1) 
    else 0 
end AS RoomNumber, 
CASE 
    WHEN isnumeric(SUBSTRING(dbo.Table.R.Number,CHARINDEX('+',dbo.Table.RNumber) + 1,LEN(dbo.Table.R.Number))) = 1 
     THEN SUBSTRING(dbo.Table.R.Number,CHARINDEX('+',dbo.Table.RNumber) + 1,LEN(dbo.Table.R.Number)) 
    else 0 
end AS HallNumber, 

мне нужно сделать еще один столбец, который вычисляет сумму RoomNumber и HallNumber, я попытался это:

SELECT *, (RoomNumber + HallNumber) AS Sum 
FROM Table 

Но я получил неверную ошибку имени столбца. Как я могу получить сумму этих двух столбцов? Благодарю.

ответ

5

У вас действительно есть только два варианта, так как вы не можете повторно использовать псевдоним на том же уровне, на котором он был определен. Либо вы можете просто сложить два CASE заявления:

CASE WHEN isnumeric(SUBSTRING(dbo.Table.RNumber,1,CHARINDEX('+',dbo.Table.RNumber) - 1)) = 1 
    THEN SUBSTRING(dbo.Table.RNumber,1,CHARINDEX('+',dbo.Table.RNumber) - 1) 
    ELSE 0 END AS RoomNumber, 
CASE WHEN isnumeric(SUBSTRING(dbo.Table.R.Number,CHARINDEX('+',dbo.Table.RNumber) + 1,LEN(dbo.Table.R.Number))) = 1 
    THEN SUBSTRING(dbo.Table.R.Number,CHARINDEX('+',dbo.Table.RNumber) + 1,LEN(dbo.Table.R.Number)) 
    ELSE 0 END AS HallNumber, 
(CASE WHEN isnumeric(SUBSTRING(dbo.Table.RNumber,1,CHARINDEX('+',dbo.Table.RNumber) - 1)) = 1 
    THEN SUBSTRING(dbo.Table.RNumber,1,CHARINDEX('+',dbo.Table.RNumber) - 1) 
    ELSE 0 END 
+ 
CASE WHEN isnumeric(SUBSTRING(dbo.Table.R.Number,CHARINDEX('+',dbo.Table.RNumber) + 1,LEN(dbo.Table.R.Number))) = 1 
    THEN SUBSTRING(dbo.Table.R.Number,CHARINDEX('+',dbo.Table.RNumber) + 1,LEN(dbo.Table.R.Number)) 
    ELSE 0 END) AS Sum 

Или вы можете попробовать оборачивать ваш текущий запрос как подзапрос, где псевдонимы уже определены будут доступны:

SELECT t.RoomNumber, 
     t.HallNumber, 
     (t.RoomNumber + t.HallNumber) AS Sum 
FROM 
(
    ... your original query ... 
) t 
2

Вам необходимо подзапрос для суммирования вычисленных столбцов.

SELECT a.*, (a.RoomNumber + a.HallNumber) AS Sum 
    (SELCT CASE 
     WHEN isnumeric(SUBSTRING(dbo.Table.RNumber,1,CHARINDEX('+',dbo.Table.RNumber) - 1)) = 1 
      THEN SUBSTRING(dbo.Table.RNumber,1,CHARINDEX('+',dbo.Table.RNumber) - 1) 
     else 0 
    end AS RoomNumber, 
    CASE 
     WHEN isnumeric(SUBSTRING(dbo.Table.R.Number,CHARINDEX('+',dbo.Table.RNumber) + 1,LEN(dbo.Table.R.Number))) = 1 
      THEN SUBSTRING(dbo.Table.R.Number,CHARINDEX('+',dbo.Table.RNumber) + 1,LEN(dbo.Table.R.Number)) 
     else 0 
    end AS HallNumber) AS a 
Смежные вопросы