基于SQL中的布尔列打印出属性描述列表

时间:2011-01-14 18:52:36

标签: sql sql-server

我有一个包含几个布尔列的表,如:IsProductionWorker,IsMaterialHandler,IsShopSupervisor等。此表中的记录可能有几个列值为true。

我想要做的是查询返回1个字段,其中包含所有属性的列表,例如AttributeList,如果这3个列为真,则返回:“生产工人,物料搬运工,商店主管”。

我可以想到一些强力方法,也许是通过使用临时表更优雅的方法(之前我做过类似的事情),但我很好奇这是做什么的最佳方式将会是,如果有任何更容易的实现。

感谢。

2 个答案:

答案 0 :(得分:4)

真的没有优雅。简单,是的。

每行要为每个标志将标志更改为字符串。聪明的选择并不多......

SELECT
    SUBSTRING (
       CASE WHEN IsProductionWorker = 1 THEN ', Production Worker' ELSE '' END +
       CASE WHEN IsMaterialHandler= 1 THEN ', Material Handler' ELSE '' END +
       CASE WHEN IsShopSupervisor= 1 THEN ', Shop Supervisor' ELSE '' END +
       ... ,
       3, 8000)
FROM
    MyTable
WHERE
     ...

答案 1 :(得分:0)

你可以试试这个。

select CASE WHEN isProductionWorker = 1 THEN 'Production Worker' ELSE '' END
    + CASE WHEN cast(isProductionWorker as int) + isMaterialHandler = 2 THEN ', ' else '' END
    + CASE WHEN isMaterialHandler = 1 THEN 'Material Handler' ELSE '' END
    + CASE WHEN cast(isProductionWorker as int) + isMaterialHandler + isShopSupervisor > 1 THEN ', ' else '' END
    + CASE WHEn isShopSupervisor = 1 THEN 'Shop Supervisor' ELSE '' END AS AttributeList
from MyTable