Member 12245539 Ответов: 1

Как игнорировать значение varchar в столбце таблицы SQL


У меня есть стол.

create table tbl (id int, col1 varchar(50), col2 varchar(50),col3 varchar(50))insert into tbl values (1,'20','25','50')
insert into tbl values (2,'30','35','60')
insert into tbl values (3,'AB','AB','50')


Я хочу суммировать три столбца, для этого я использую
select id, sum(convert(decimal,col1)+convert(decimal,col2)+convert(decimal,col3)) as total from tbl  group by id, col1, col2, col3 


Теперь я хочу игнорировать значения varchar и видеть результат как

id    total
     1     95
     2     125
     3     50


Пожалуйста, помогите кому-нибудь...

Что я уже пробовал:

select id, sum(convert(decimal,col1)+convert(decimal,col2)+convert(decimal,col3)) as total from tbl  group by id, col1, col2, col3 

1 Ответов

Рейтинг:
4

Karthik_Mahalingam

пробовать

select id, (col1+col2+col3) as Total
 from  (
		select
		id, 
		case  ISNUMERIC(col1) when 1  then CAST(col1 as decimal) else 0 end as col1 ,
		case  ISNUMERIC(col2) when 1  then CAST(col2 as decimal) else 0 end as col2 ,
		case  ISNUMERIC(col3) when 1  then CAST(col3 as decimal) else 0 end as col3 
		from tbl  group by id, col1, col2, col3  
      )a 


Примечание: Пожалуйста, рассмотрите пункты по Ричард [^] в разделе комментариев.


Member 12245539

5-звездный

Karthik_Mahalingam

Спасибо

Member 12245539

Босс
Если вы не возражаете, то могу я немного спросить??

Я хочу показать col1, col2 и col3 также, как
ИДЕНТИФИКАТОР СТОЛБЦА COL1 И COL2 КОЛ3 ОБЩАЯ
1 20 25 50 95
2 30 35 60 125
3 AB AB 50 50

Karthik_Mahalingam

select id,col1,col2,col3, (col1_s+col2_s+col3_s) as Total
 from  (
		select
		id, 
		col1,col2,col3,
		case  ISNUMERIC(col1) when 1  then CAST(col1 as decimal) else 0 end as col1_s ,
		case  ISNUMERIC(col2) when 1  then CAST(col2 as decimal) else 0 end as col2_s ,
		case  ISNUMERIC(col3) when 1  then CAST(col3 as decimal) else 0 end as col3_s 
		from tbl  group by id,col1,col2,col3   
      )a 

Member 12245539

Спасибо

Karthik_Mahalingam

добро пожаловать

Richard Deeming

Будьте осторожны с ISNUMERIC - он считает, что все следующие строки, чтобы быть "числовой":

* '-'
* '+'
* '$'
* '.'
* ','
* '\'

Для SQL 2012 или более поздней версии, TRY_PARSE[^]- это лучший вариант.

Для предыдущих версий, column NOT LIKE '%[^0-9.]%' должно быть, достаточно близко.

Karthik_Mahalingam

Да, Ричард, ты уже говорил мне то же самое в "Старой почте". Я совсем забыл :)
Я обновлю свое решение.