我有一个包含几个布尔列的表,如:IsProductionWorker,IsMaterialHandler,IsShopSupervisor等。此表中的记录可能有几个列值为true。
我想要做的是查询返回1个字段,其中包含所有属性的列表,例如AttributeList,如果这3个列为真,则返回:“生产工人,物料搬运工,商店主管”。
我可以想到一些强力方法,也许是通过使用临时表更优雅的方法(之前我做过类似的事情),但我很好奇这是做什么的最佳方式将会是,如果有任何更容易的实现。
感谢。
答案 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