T-SQL递归
我有一组如下所示的数据T-SQL递归,sql,sql-server,common-table-expression,Sql,Sql Server,Common Table Expression,我有一组如下所示的数据 Name Time Perc Group Mode Control Cancelled A 10:52 10.10 10 0 1 0 B 09:00 10.23 10 1 1 1 C 12:02 12.01 12 0 1 1 D 10:45 12.12 12 1 7
Name Time Perc Group Mode Control Cancelled
A 10:52 10.10 10 0 1 0
B 09:00 10.23 10 1 1 1
C 12:02 12.01 12 0 1 1
D 10:45 12.12 12 1 7 1
E 12:54 12.56 12 1 3 0
F 01:01 13.90 13 0 11 1
G 02:45 13.23 13 1 12 1
H 09:10 13.21 13 1 1 0
我需要像下面这样的输出
Group Perc Cancelled
10 20.33 1
12 36.69 2
13 40.34 2
我得到的是这样的东西
Group Perc Cancelled
10 20.33 5
12 36.69 5
13 40.34 5
我不知道该怎么称呼它,我脑子里有个东西叫它CTE?,但我真的搞不懂
这是我的消息来源
SELECT Group, SUM(Perc), Cancelled FROM
(SELECT Group, Perc, (SELECT COUNT(*) FROM tblName WHERE Cancelled=1) AS Cancelled FROM tblName WHERE 1=1 AND Group>=10)dt
GROUP BY Group, Cancelled
从您的示例中,您不需要嵌套查询、任何递归等
SELECT
Group,
SUM(Perc) AS total_perc,
SUM(cancelled) AS total_cancelled
FROM
tblName
WHERE
1=1
AND Group >= 10
GROUP BY
Group
如果您确实有一些不同的数据,那么您可能需要使用类似于
SUM(CASE WHEN cancelled > 0 THEN 1 ELSE 0 END) AS total_cancelled
您是否在实际代码中使用关键字作为列名?我看到了精选组,感到困惑。一组一组的让人困惑。刚才,我做的是创建了一个临时表,然后先选择所有数据,然后左键加入临时表。。它确实解决了这个问题,但我觉得它有点站不住脚..1=1的目的是什么?@goatco-从OPs代码复制而来。我猜这是为了使构建动态where子句更容易。我的示例是我的错,而不是我的错,我忘了在示例中显示,在我可以取消之前,我需要验证模式和控件,例如如果模式=1和控件=1,那么它就被取消了。。那么你能告诉我怎么做吗?@paulpolo-你的意思是你没有一个取消字段,但是如果模式>0,控制>0,一行应该被视为取消?您在注释中说=1,但在数据中有一行control=7,但您将其视为已取消?