2015-06-05 89 views
7

我有一個表是這樣的:查詢在SQL Server中的表基於列2的排列3

col1 col2 col3 
111  1  1 
222  1  0 
333  0  1 
444  0  0 

這裏col2 = 1意味着col1是商業,col3 = 1意味着col1是零售爲好。我如何得到如下結果?

ID  Description 
111  Commercial 
111  Retail 
222  Commercial 
333  Retail 

回答

8

您可以用UNION ALL做到這一點:

SELECT ID = col1, 'Commercial' FROM MyTable WHERE col2=1 
    UNION ALL 
SELECT ID = col1, 'Retail' FROM MyTable WHERE col3=1 
1

使用幾乎相同以上,但在一個單一的結果集

Select ID = col1, t.Description 
from MyTable 
cross apply (select Description = 'Commercial' where col2 = 1 union 
      select Description = 'Retail' where coll3 = 1)t 
+1

如果你想引用一個其他答案,鏈接到它通常會更好(每個答案下面有一個共享鏈接,這會給你一個URL,而且我通常會使用「dasblinkenlight的答案」這樣的短語作爲鏈接文本),而不是使用「位置」像「上面」這樣的語言 - 畢竟,答案的位置可以基於投票和接受而改變。 –

+1

dasblinkenlight的回答也只有一個結果集。 – AakashM

0

可與UNPIVOT也可以做:

DECLARE @t TABLE 
    (
     col1 INT , 
     col2 INT , 
     col3 INT 
    ) 
INSERT INTO @t 
VALUES (111, 1, 1), 
     (222, 1, 0), 
     (333, 0, 1), 
     (444, 0, 0) 

SELECT col1 , 
     CASE WHEN col = 'col2' THEN 'Commercial' 
      ELSE 'Retail' 
     END AS Description 
FROM @t UNPIVOT(r FOR col IN ([col2], [col3])) u 
WHERE r <> 0