在SQL中打印基于布尔列的属性描述列表
我有一个包含几个布尔列的表,如:IsProductionWorker、IsMaterialHandler、IsShopSupervisor等。此表中的记录可能有几个列值为true 我想做的是让一个查询返回一个字段,其中包含所有为真属性的列表,比如AttributeList,如果这三列为真,它将返回:生产工人、物料处理员、车间主管 我可以想出一些蛮力方法,也许是一种更优雅的方法,通过使用一个临时表,我以前也做过类似的事情,但我很好奇这样做的最佳方式是什么,是否有更简单的实现在SQL中打印基于布尔列的属性描述列表,sql,sql-server,Sql,Sql Server,我有一个包含几个布尔列的表,如:IsProductionWorker、IsMaterialHandler、IsShopSupervisor等。此表中的记录可能有几个列值为true 我想做的是让一个查询返回一个字段,其中包含所有为真属性的列表,比如AttributeList,如果这三列为真,它将返回:生产工人、物料处理员、车间主管 我可以想出一些蛮力方法,也许是一种更优雅的方法,通过使用一个临时表,我以前也做过类似的事情,但我很好奇这样做的最佳方式是什么,是否有更简单的实现 谢谢 真的,优雅是不可
谢谢 真的,优雅是不可能的。简单,是的 对于每一行,您要将一个标志更改为一个字符串。聪明的选择不多
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
...
真的,优雅是不可能的。简单,是的 对于每一行,您要将一个标志更改为一个字符串。聪明的选择不多
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
...
你可以试试这个
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
你可以试试这个
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
谢谢这或多或少是我以前做的。我想如果它没有坏,就没有办法修理了汉克斯。这或多或少是我以前做的。我想如果它没有坏,就没有办法修理了D