2

如何在 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

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

4

5 回答 5

3

询问:

SQLFIDDLE示例

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 |
于 2012-11-27T11:55:57.857 回答
2

您可以使用以下CASE语句:

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

请参阅带有演示的 SQL Fiddle

结果:

| ID | RESULT |
---------------
|  1 |  false |
|  2 |   true |
|  3 |   true |
|  4 |   true |
|  5 |  false |
|  6 |  false |
于 2012-11-27T11:56:06.467 回答
1

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

SELECT id, IF(id IN ( 2, 3, 4 ) ,  'true',  'false' ) AS idIs234
FROM Messageset
于 2012-11-27T11:50:16.387 回答
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

于 2012-11-27T11:51:46.897 回答
0

现在没事了

SELECT id, 
case when id in(2,3,4) then 'true'
else 'false'
end idIs234 from Messageset
于 2012-11-27T12:00:15.887 回答