2012-01-11 92 views
1

我在我的表中有2个字段,我需要一个case语句。在“case”语句中使用2个不同字段的“like”

 
Col1   Col2  Col3 
abc.txt  Y  0 
def.txt  N  0 
bbck.txt  Y  1 

Col3值是基于以下面的方式将Col1Col2值。
Y = 1N = 0。因此,所有的Col2Y值应Col2成为col31,并且N将成为0Col3,除非col1值与%c.txt结束。如您所见,由于abc.txt%c.txt结尾,因此col3中的值变为0

我知道这可以用嵌套的CASE语句完成,也许为了完成这个。有谁知道怎么样?

这里是我的代码

SELECT 
    CASE Col2 
    WHEN 'Y' THEN '1' 
    WHEN 'N' THEN '0' 
    ELSE 
(CASE WHEN [Col1] LIKE '%c.txt' THEN '0' 
END) 
    END 
    AS Col3, 
* 
FROM Tabl1 

希望这给一个想法

+0

这个问题是非常不清楚,并会建议张贴到目前为止尝试过。 – Standage 2012-01-11 23:51:40

+0

希望这有助于。谢谢 – user970225 2012-01-11 23:54:08

+0

我已经尝试了很多次。我已登录,但是当我刷新几次后,即使我已经登录,我也无法选择答案。 – user970225 2012-01-11 23:59:54

回答

2

可能:

SELECT 
    CASE 
     WHEN Col2 = 'N' 
     OR Col1 LIKE '%c.txt' 
      THEN '0' 
     WHEN Col2 = 'Y' 
      THEN '1' 
    END AS Col3 
    , * 
FROM Tabl1 
+0

完美答案。非常感谢。 – user970225 2012-01-12 00:06:49

+0

如果Col2只有'Y'和'N'值而没有其他值,'WHEN Col2 ='Y'THEN'1''可以替换为'ELSE'1''。 – 2012-01-12 00:13:15

0

这可能是你找什么:

SELECT * FROM Tabl1 
cross apply 
    (
     select Col3 = 
     CASE 
      WHEN Tabl1.Col2 = 'Y' then '1' 
      WHEN Tabl1.Col2 = 'Y' then '1' 
      WHEN RIGHT(Tabl1.Col1, 6) = 'c.txt' then '0' 
      END 
) as Col3 
0
SELECT 
    CASE WHEN Col2 LIKE '%c.txt' THEN '0' 
     ELSE 
     CASE 
      WHEN Col2 = 'N' THEN '0' 
      WHEN Col2 = 'Y' THEN '1' 
     END 
    END AS COL3 
FROM Tabl1 
0

我认为你的规格不够清晰,例如在“UNLESS”一词之前的逗号是否暗示以下条款适用于这两个前面的条款?

好像有四种可能的组合:

1) Col1 LIKE '%c.txt' 
    AND Col2 = 'Y' 

2) Col1 LIKE '%c.txt' 
    AND Col2 = 'N' 

3) Col1 NOT LIKE '%c.txt' 
    AND Col2 = 'Y' 

4) Col1 NOT LIKE '%c.txt' 
    AND Col2 = 'N' 

你说

我需要一个case语句

这是真的吗?使用SQL,同样的事情总是可以通过多种方式实现(这就是为什么要构建一个优化器非常困难:)我认为一个规范应该说明需要什么,并且不要在上放置不合理的限制如何实现它。

以下用途UNION而非情况下,如果你正在考虑这从一开始就那么也许您的天赋会更好;)

WITH Tabl1 
    AS 
    (
     SELECT * 
     FROM (
       VALUES ('abc.txt', 'Y'), 
        ('def.txt', 'N'), 
        ('bbck.txt', 'Y'), 
        ('disc.txt', 'N') 
      ) AS T (Col1, Col2) 
    ) 
SELECT '0' AS Col3, * 
    FROM Tabl1 
WHERE Col1 LIKE '%c.txt' 
     AND Col2 = 'Y' 
UNION 
SELECT '0' AS Col3, * 
    FROM Tabl1 
WHERE Col1 LIKE '%c.txt' 
     AND Col2 = 'N' 
UNION 
SELECT '1' AS Col3, * 
    FROM Tabl1 
WHERE Col1 NOT LIKE '%c.txt' 
     AND Col2 = 'Y' 
UNION 
SELECT '0' AS Col3, * 
    FROM Tabl1 
WHERE Col1 NOT LIKE '%c.txt' 
     AND Col2 = 'N'; 

附:我编码这与匹配的答案,但我不相信这是正确的!