Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中打印基于布尔列的属性描述列表_Sql_Sql Server - Fatal编程技术网

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

在SQL中打印基于布尔列的属性描述列表,sql,sql-server,Sql,Sql Server,我有一个包含几个布尔列的表,如:IsProductionWorker、IsMaterialHandler、IsShopSupervisor等。此表中的记录可能有几个列值为true 我想做的是让一个查询返回一个字段,其中包含所有为真属性的列表,比如AttributeList,如果这三列为真,它将返回:生产工人、物料处理员、车间主管 我可以想出一些蛮力方法,也许是一种更优雅的方法,通过使用一个临时表,我以前也做过类似的事情,但我很好奇这样做的最佳方式是什么,是否有更简单的实现 谢谢 真的,优雅是不可

我有一个包含几个布尔列的表,如: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