我怎样才能将SELECT id,(id in(2,3,4))中的内容作为Messageset中的idIs234

时间:2012-11-27 11:45:25

标签: sql sql-server tsql

如何在sql server中创建这样的查询?

SELECT id, (id in(2,3,4) ) as idIs234 from Messageset 

我想要一个像

这样的结果
id idIs234 
-----------
1 false
2 true
3 true
4 true
5 false
6 false

此代码不起作用,但我希望有一个我不知道的替代方案。

5 个答案:

答案 0 :(得分:3)

查询:

<强> SQLFIDDLEexample

SELECT 
id,
CASE WHEN id in(2,3,4) 
      THEN 'TRUE'
      ELSE 'FALSE'
  END AS ids
FROM Messageset 

结果:

| ID |   IDS |
--------------
|  1 | FALSE |
|  2 |  TRUE |
|  3 |  TRUE |
|  4 |  TRUE |
|  5 | FALSE |
|  6 | FALSE |

答案 1 :(得分:2)

您可以使用CASE声明:

select id,
  case when id in (2,3,4) then 'true' else 'false' end result
from Messageset

请参阅SQL Fiddle with Demo

结果:

| ID | RESULT |
---------------
|  1 |  false |
|  2 |   true |
|  3 |   true |
|  4 |   true |
|  5 |  false |
|  6 |  false |

答案 2 :(得分:1)

你没有提到你正在使用的数据库服务器,并且没有标准的方法,所以我会告诉你如何用MySQL IF function来做这件事,就像这样:

SELECT id, IF(id IN ( 2, 3, 4 ) ,  'true',  'false' ) AS idIs234
FROM Messageset

答案 3 :(得分:1)

假设 - 2,3,4不是硬编码列表..但只是一个简短的短名单示例。

其他解决方案对2, 3 or 4进行了硬编码检查。我假设你有一个简短的清单..所以我强调如果你做NULL,你可以检查LEFT OUTER JOIN

-- Setup the subquery / sub table.
-- In this case, it's a variable table.
DECLARE @TempData TABLE (Id INTEGER PRIMARY KEY NOT NULL)
INSERT INTO @TempData VALUES (2)
INSERT INTO @TempData VALUES (3)
INSERT INTO @TempData VALUES (4)

-- Outer join the two tables. If there's no join, then the second table 
-- will be NULL.
SELECT a.Id AS Id, 
    CASE WHEN b.Id IS NULL THEN 'False' 
        ELSE 'True' END 
        AS Idls234
FROM [dbo].[Messageset] a
    LEFT OUTER JOIN @TempData b ON a.Id = b.Id

通过hvd的帮助解决了问题。

请参阅Sql Fiddle with Demo

答案 4 :(得分:0)

现在好了

SELECT id, 
case when id in(2,3,4) then 'true'
else 'false'
end idIs234 from Messageset