sql-server-2008 - CASE 语句或类似技术

标签 sql-server-2008 case

我正在尝试使用 CASE 语句,但没有得到我想要的答案。

这是代码:

DECLARE @Table TABLE (DocID INT, DocNumber VARCHAR(10),DocDevStat INT, MilestoneDate DATETIME,  
                      MilestoneID INT) 
INSERT INTO @Table VALUES (30, '14-1', 6, '10-01-2001', 10) 
INSERT INTO @Table VALUES (30, '14-1', 6, '10-15-2001', 11) 
INSERT INTO @Table VALUES (30, '14-1', 6, '11-06-2002', 13) 
INSERT INTO @Table VALUES (30, '14-1', 6, '11-01-2003', 27) 
INSERT INTO @Table VALUES (30, '14-1', 6, '11-01-2003', 30) 
INSERT INTO @Table VALUES (30, '14-1', 6, '03-01-2004', 28) 
INSERT INTO @Table VALUES (30, '14-1', 6, '03-01-2004', 35) 
INSERT INTO @Table VALUES (31, '14-3', 2, '06-27-2003', 10) 
INSERT INTO @Table VALUES (31, '14-3', 2, '05-05-2004', 27) 
INSERT INTO @Table VALUES (31, '14-3', 2, '05-05-2004', 30) 
INSERT INTO @Table VALUES (31, '14-3', 2, '07-20-2005', 35) 
INSERT INTO @Table VALUES (31, '14-3', 2, '08-31-2005', 32) 
INSERT INTO @Table VALUES (36, '1-2', 7, '10-01-1996', 10) 
INSERT INTO @Table VALUES (36, '1-2', 7, '10-01-1996', 11) 
INSERT INTO @Table VALUES (36, '1-2', 7, '12-01-1996', 28) 
INSERT INTO @Table VALUES (36, '1-2', 7, '12-01-1996', 35) 

Select distinct t.Docid, t.DocNumber,

case when t.DocDevStat IN (6,7,8) and t.MilestoneID = 35 then Max(t.Milestonedate)
     when t.DocDevStat IN (2,3,4) then Convert(date,GETDATE()) end AS LatestDate

FROM @Table t
Group By t.DocID, t.DocNumber, t.DocDevStat, t.MilestoneID

我得到的结果是:

Docid      DocNumber    LatestDate
30         14-1           NULL
30         14-1           2004-03-01 
31         14-3           2012-10-17 
36          1-2           NULL
36          1-2           1996-12-01 

但我想得到:

Docid      DocNumber    LatestDate
30         14-1           2004-03-01 
31         14-3           2012-10-17 
36          1-2           1996-12-01 

在这种情况下使用 CASE 语句是否正确?

最佳答案

Select DISTINCT t.Docid, t.DocNumber,
case when t.DocDevStat IN (6,7,8) then Max(t.Milestonedate)
when t.DocDevStat IN (2,3,4) then Convert(date,GETDATE()) end AS LatestDate
FROM @Table t
where t.DocDevStat IN (2,3,4) OR (t.DocDevStat IN (6,7,8) and t.MilestoneID = 35)
Group By t.DocID, t.DocNumber, t.DocDevStat, t.MilestoneID

此查询返回您正在查找的数据。我将您要搜索的条件添加到了 where 子句中。

关于sql-server-2008 - CASE 语句或类似技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12959661/

相关文章:

sql-server - 如何使用 'inserted' 和 'deleted' 表中的 text、ntext 或 image 列

sql - 按列名对统计数据进行分组

sql-server - 如何在不知道树是否已经存在的情况下将元素插入到 xml 列中?

azure - 如何将测试用例添加到产品待办事项中的产品待办事项项

MySQL/玛丽亚数据库 : Can't create a procedure using the case statement

sql-server-2008 - 横向报告中的页码

asp.net - 如何使带有 SqlDependency 的 OutputCache 依赖于每个请求的数据库中的一行?

sql-server - SQL Server : conditional case in where clause

MYSQL 出现问题时的情况

改变 C 中字母的大小写?