我有一个包含数据的表,我希望将其转换为整数。
示例:
如果列具有值:示例值
ISNULL([Jan],0)+ISNULL([Feb],1) +ISNULL([Mar],3) +ISNULL([Apr],0)
+ISNULL([May],0) +ISNULL([Jun],0) +ISNULL([Jul],0) +ISNULL([Aug],1)
+ISNULL([Sep],0) +ISNULL([Oct],3) +ISNULL([Nov],0) +ISNULL([Dec],2)
我需要输出为10
提前致谢。
答案 0 :(得分:2)
添加了一个额外的列和行,以演示如何使用具有不同信息的多个行。
这应该这样做:
DECLARE @t table(id int identity(1,1), a varchar(max))
INSERT @t values
('ISNULL([Jan],0)+ISNULL([Feb],1) +ISNULL([Mar],3) +ISNULL([Apr],0)
+ISNULL([May],0) +ISNULL([Jun],0) +ISNULL([Jul],0) +ISNULL([Aug],1)
+ISNULL([Sep],0) +ISNULL([Oct],3) +ISNULL([Nov],0) +ISNULL([Dec],2) '),
(' ISNULL([Jan],5)+ISNULL([Feb],1) +ISNULL([Mar],3) +ISNULL([Apr],0)
+ISNULL([May],0) +ISNULL([Jun],0) +ISNULL([Jul],0) +ISNULL([Aug],1)
+ISNULL([Sep],0) +ISNULL([Oct],3) +ISNULL([Nov],0) +ISNULL([Dec],2) ')
SELECT id, sum(cast(t.c.value('.', 'VARCHAR(2000)') as int)) x
FROM (
SELECT id, x = CAST('<t>' +
REPLACE(REPLACE(a, ',', '</t><t>'), ')', '</t><t>') + '</t>' AS XML)
FROM @t
) a
CROSS APPLY x.nodes('/t') t(c)
WHERE isnumeric(t.c.value('.', 'VARCHAR(2000)')) = 1
GROUP BY id
结果:
id x
1 10
2 15
答案 1 :(得分:0)
ISNULL无法正常工作,因为如果该字段不为NULL,它将追加该字段。正如其他人所说,您应该优先改变数据库的结构。
尽管如此......如果表格中有一行,这应该有效。
Select [Jan] + [Feb] + [Mar] + [Apr] + [May] + [Jun] + [Jul] + [Aug] + [Sep] + [Oct] + [Nov] + [Dec]
From
(
Select
CASE WHEN [Jan] IS NULL THEN 0 ELSE 0 END 'Jan',
CASE WHEN [Feb] IS NULL THEN 1 ELSE 0 END 'Feb',
CASE WHEN [Mar] IS NULL THEN 3 ELSE 0 END 'Mar',
CASE WHEN [Apr] IS NULL THEN 0 ELSE 0 END 'Apr',
CASE WHEN [May] IS NULL THEN 0 ELSE 0 END 'May',
CASE WHEN [Jun] IS NULL THEN 0 ELSE 0 END 'Jun',
CASE WHEN [Jul] IS NULL THEN 0 ELSE 0 END 'Jul',
CASE WHEN [Aug] IS NULL THEN 1 ELSE 0 END 'Aug',
CASE WHEN [Sep] IS NULL THEN 0 ELSE 0 END 'Sep',
CASE WHEN [Oct] IS NULL THEN 3 ELSE 0 END 'Oct',
CASE WHEN [Nov] IS NULL THEN 0 ELSE 0 END 'Nov',
CASE WHEN [Dec] IS NULL THEN 2 ELSE 0 END 'Dec'
From YourTable
) x
答案 2 :(得分:0)
这就是你想要的吗?
declare @cmd varchar(2000) = 'select ' + '
ISNULL([Jan], 0) +ISNULL([Feb], 1) + ISNULL([Mar], 3) + ISNULL([Apr], 0)
+ ISNULL([May], 0) +ISNULL([Jun], 0) + ISNULL([Jul], 0) + ISNULL([Aug], 1)
+ ISNULL([Sep], 0) +ISNULL([Oct], 3) + ISNULL([Nov], 0) + ISNULL([Dec], 2)
' + ' from YourTableName';
execute (@cmd);
或:
declare @cmd varchar(2000) = 'select ' + (select ColumnName from YourTableName) + ' from YourTableName';
execute (@cmd);