2011-01-14 40 views
1

我得到了一個帶有幾個布爾列的表,如:IsProductionWorker,IsMaterialHandler,IsShopSupervisor等。此表中的一條記錄可能有幾個這樣的列值爲true 。在SQL中打印出基於布爾列的屬性描述列表

我想要做的是有一個查詢返回1字段的所有屬性是真實的列表,說屬性列表,如果這3列是真實的將返回:「生產工人,物料處理程序,商店主管」。

我可以通過使用臨時表來思考一些暴力方法,也許更優雅的方法(我之前做過類似的事情),但我很好奇最好的做法這將是,如果有更容易的實現。

謝謝。

回答

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 
    ... 
+0

謝謝。這或多或少是我之前做的。我猜如果它沒有壞掉,那就沒有解決辦法了。 :d – Overhed 2011-01-14 19:41:53

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