2016-01-30 128 views
1

柱状数据我有一个结构表如下图所示查询在SQL Server

CustimerId Name Store Bill Item1 Item2 Item3 

1   A StoreA 100   Y 
2   A StoreB 200 N    Y 
3   B StoreA 300 N 
4   C StoreC 400 Y  N  Y 

现在我想根据自己在列中的值项目1,项目2,项目3是如下一列。

CustimerId Name Store Bill BoughtAnySpecialItem 

1   A StoreA 100 Y 
2   A StoreB 200 Y 
3   B StoreA 300 N 
4   C StoreC 400 Y 

这意味着如果通过Item1到Item3的列中的任何值是'Y'我想使它'Y',否则'N'。项目列是更多和/或不同的名称(不像Item-X)。

我需要查询来做到这一点。任何人都可以建议在SQL Server中执行此操作的最佳方法吗?或者至少将我指向正确的资源。提前致谢。

回答

2

您可以使用case语句来做到这一点,是这样的:

case when Item1 = 'Y' or Item2 = 'Y' or Item3 = 'Y' then 'Y' else 'N' end 
+0

但我的专栏更多。有200列这样的。有没有任何迭代方法? – aditya

+0

不是,您可以构建与动态SQL相同的内容,但仍需要列出要检查的列。 –

1

既然你有多个列的检查,你可以扭转IN操作

SELECT *, 
     CASE WHEN 'Y' in (Item1 , Item2 , Item3) THEN 'Y' ELSE 'N' END as BoughtAnySpecialItem 
FROM Yourtable 

现在你可以很容易地列出列在IN opertaor