日期:2014-05-17  浏览次数:20510 次

求一条判断语句
T1
编号 第一列 第二列 第三列 第四列
 1  是   否   是   否
 2  否   否   是   否
 3  是   是   是   否
 4  否   否   是   是
结果
编号  结果一  结果二
 1  13   1010
 2  3    0010
 3  123   1110
 4  34   0011
结果一的意思是如果哪列上有值,就记录哪列,举例编号一,第一列和第三列结果是“是”,所以在结果一中显示“13”。
结果二的意思是,综合指定列,做个合集,0代表否,1代表是

------解决方案--------------------
USE test
GO

if object_id('T1') is not null 
drop table T1
Go
Create table T1([编号] smallint,[第一列] nvarchar(1),[第二列] nvarchar(1),[第三列] nvarchar(1),[第四列] nvarchar(1))
Insert into T1
Select 1,N'是',N'否',N'是',N'否'
Union all Select 2,N'否',N'否',N'是',N'否'
Union all Select 3,N'是',N'是',N'是',N'否'
Union all Select 4,N'否',N'否',N'是',N'是'




SELECT
编号
,CASE WHEN [第一列]=N'是' THEN '1' ELSE '' END
+CASE WHEN [第二列]=N'是' THEN '2' ELSE '' END
+CASE WHEN [第三列]=N'是' THEN '3' ELSE '' END
+CASE WHEN [第四列]=N'是' THEN '4' ELSE '' END AS [结果一]
,CASE WHEN [第一列]=N'是' THEN '1' ELSE '0' END
+CASE WHEN [第二列]=N'是' THEN '1' ELSE '0' END
+CASE WHEN [第三列]=N'是' THEN '1' ELSE '0' END
+CASE WHEN [第四列]=N'是' THEN '1' ELSE '0' END AS [结果二]
FROM T1

/*
编号     结果一  结果二
------ ---- ----
1      13   1010
2      3    0010
3      123  1110
4      34   0011
*/

------解决方案--------------------
没见过这种设计,呵呵,学习了。
傻傻问一下,有了结果2,这个结果一还有什么意义么?

做法:
在表格1结构上临时添加4列,表示是否有值,用0,1表示,那么你的结果2就有了。
结果1可以在结果2的基础上换算。