2015-01-14 5 views
0

ОК, здесь идет. Это, должно быть, очень легко сделать, но все, что я делаю, это вырывание моих когда-либо сжимающихся волос !!!!sql server - добавление двух столбцов из подзапросов

У меня есть SQL-запрос по линиям:

Select A.ID, 
     A.field 
     (select vchr_Number from tbl_two B where B.int_ParentId = A.ID) as 'Number1', 
     (select vchr_Number from tbl_three C where C.int_ParentId = A.ID) as 'Number2', 
     (Number1 + Number2) as 'Number3' 
From tbl_Something A 

То, что я пытаюсь сделать, это добавить Number1 и Numnber2 вместе. Мне нужно вернуть все три значения

Поскольку оба значения являются строками, если я просто использую нормальное дополнение «+», он просто объединяет две строки, поэтому, если Number1 = 7 и number2 = 8, то Number3 будет 78, а не 15. Я попытался использовать команду Cast для преобразования строки в целые числа, не уверен в синтаксисе.

ответ

1

Вы должны преобразовать данные в соответствующий тип данных (в примере ниже, я использую INT):

SELECT T.*, CONVERT(INT, T.Number1) + CONVERT(INT, T.Number2) as 'Number3' 
FROM (
    SELECT A.ID, A.field, 
     (select vchr_Number 
     from tbl_two B 
     where B.int_ParentId = A.ID) as 'Number1', 
     (select vchr_Number 
     from tbl_three C 
     where C.int_ParentId = A.ID) as 'Number2', 
    From tbl_Something A 
) AS T 

или

SELECT A.ID, A.field, 
    (select CONVERT(INT, vchr_Number) 
    from tbl_two B 
    where B.int_ParentId = A.ID) + 
    (select CONVERT(INT, vchr_Number) 
    from tbl_three C 
    where C.int_ParentId = A.ID) as 'SumOfNumbers', 
From tbl_Something A 

Примечание: Вы должны хранить данные как его исходный тип данных: цифры как цифры, текст в виде текста, дата в качестве даты и т. д. Никогда не используйте text/char, (n) varchar/для хранения числового или дата-типа данных!

+0

предоставленный sql - всего лишь небольшая выборка из общего запроса. поэтому это решение нецелесообразно. Решение должно учитывать это кодирование. Фактический sql имеет длину более 200 строк, как используется в отчете – gilesrpa

+0

Основная идея состоит в том, чтобы хранить данные в качестве исходного типа данных. Таким образом, если вы можете изменить тип данных в своей базе данных, это лучший вариант для вас. Тогда вы никогда не будете вынуждены что-либо конвертировать. –

+0

Хммм, не заставляя себя услышать в данный момент. Могу ли я не просто добавить следующий код: '(выберите vchr_Number из tbl_two B, где B.int_ParentId = A.ID) + (выберите vchr_Number из tbl_three C, где C.int_ParentId = A.ID)', но преобразуйте vchr_number по каждому в int ? – gilesrpa

0
Select A.ID, 
     A.field,(Number1 + Number2) as 'Number3' 
From 
(
Select A.ID, 
     A.field 
     (select vchr_Number from tbl_two B where B.int_ParentId = A.ID) as 'Number1', 
     (select vchr_Number from tbl_three C where C.int_ParentId = A.ID) as 'Number2', 
     (Number1 + Number2) as 'Number3' 
From tbl_Something A 
) T1 
+0

Number1 и Number2 являются данными типа varchar. –

+0

sql предоставленный - это всего лишь небольшой образец общего запроса. поэтому это решение нецелесообразно. Решение должно допускать это кодирование, как показано. Фактический sql имеет длину более 200 строк, так как используется как часть отчета. Могу ли я просто добавить два числа в качестве подзапроса? – gilesrpa

+0

yup. он практически ничего не делает для плана выполнения, но позволяет ссылаться на вычисленные столбцы как на имя. – Jeremy

Смежные вопросы