如果满足条件,则SQl服务器“选择”查询以增加新列

时间:2018-07-05 04:43:02

标签: sql sql-server subquery

我有这样的数据库表: default database picture

如果'Status'列为'good',我需要sql select查询来添加增量列值,如果'Bad',则需要获取先前的值。像这样:select query table

是否有选择查询来执行此操作?我使用sql Server Management Studio进行尝试查询。

谢谢您的帮助。

2 个答案:

答案 0 :(得分:4)

假设您使用的是SQL Server的较新版本,则建议如下所示。 (请参阅SQL Fiddle,了解其工作原理。)

SELECT
 id, 
 status, 
 sum(case when status='Good' then 1 end) OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
FROM test
ORDER by id

如果不清楚,sum公式将在status='Good'处计数为1(否则为0),并且over子句告诉SQL Server我们关心的顺序是{{1 }}(升序),并且我们应该从开头(最低ID)到当前行求和。

如果您使用的SQL Server较旧版本无法完成idpre-2012 I think)的操作,或者您想要的外观更像基本SQL的东西,则可以考虑以下方法:

ROWS BETWEEN

这应该给您相同的结果,并使用相同的SELECT t1.id, t1.status, sum(case when t2.status='Good' then 1 end) as value FROM test t1 inner join test t2 on t1.id >= t2.id GROUP BY t1.id, t1.status ORDER BY t1.id 公式,但是它将每个记录连接到同一表中的所有先前记录。希望对您有所帮助。

答案 1 :(得分:2)

尝试此答案,将Windows函数SUM与带有OVER的{​​{1}}子句一起使用就足够了(这里不需要ORDER BY

rows between