--多状态一字段存储,避免增加状态需要再新增字段的事情。sqlserver中set值即是类似存储 --创建状态表,用二进制上的1标识是否,生成身份值在建立表是指定,据身份值取状态,只需进行与运算即可 --可扩大,比如8进制,每位上可有8个选择,--假如有7种状态,则可用一个字段标识出56种选择 DROP TABLE #MyStatus GO CREATE TABLE #MyStatus( StatusName NVARCHAR(100),StatusValue INT ) INSERT INTO #MyStatus VALUES('是否高',1) --1,001 二进制数位 INSERT INTO #MyStatus VALUES('是否富',2) --2,010 INSERT INTO #MyStatus VALUES('是否帅',4) --4,100 SELECT * FROM #MyStatus --生成身份值 --张三 WITH zhangsan AS( SELECT '是否高' StatusName,1 StatusValue UNION SELECT '是否富' StatusName,0 StatusValue UNION SELECT '是否帅' StatusName,1 StatusValue ) SELECT SUM(m.StatusValue) 张三身份值 FROM zhangsan z JOIN #MyStatus m ON z.StatusName = m.StatusName WHERE Z.StatusValue = 1 --据身份值取出状态,李四身份值为3,查询各状态 SELECT m.StatusName, CASE WHEN m.StatusValue & 3 = m.StatusValue THEN '是' ELSE '否' END FROM #MyStatus m