MySQL同一表上的多个子查询

MySQL同一表上的多个子查询,mysql,Mysql,我有一个如下结构的表 ID | Amount | Bank (1 or 2) ---+--------+------ 1 | 100000 | 1 2 | 256415 | 2 3 | 142535 | 1 1 | 214561 | 2 2 | 123456 | 1 1 | 987654 | 2 我想要这样的结果(来自同一个表): 实现此目的最简单的查询是什么?此SQL查询将提取您要查找的信息: select ID, SUM(IF(Bank=1, Amount, 0

我有一个如下结构的表

ID | Amount | Bank (1 or 2)
---+--------+------
1  | 100000 | 1
2  | 256415 | 2
3  | 142535 | 1
1  | 214561 | 2
2  | 123456 | 1
1  | 987654 | 2
我想要这样的结果(来自同一个表):


实现此目的最简单的查询是什么?

此SQL查询将提取您要查找的信息:

select ID, 
       SUM(IF(Bank=1, Amount, 0)) AS Bank1,
       SUM(IF(Bank=2, Amount, 0)) AS Bank2
from TableName
group by ID ASC

此SQL查询将提取您正在查找的信息:

select ID, 
       SUM(IF(Bank=1, Amount, 0)) AS Bank1,
       SUM(IF(Bank=2, Amount, 0)) AS Bank2
from TableName
group by ID ASC
使用tsql,我能够得出:

select distinct t.id,
      isnull((select sum(t1.amount) 
         from temp as t1
         where t.id = t1.id and t1.bank = 1), 0) as 'bank 1 sum',
      isnull((select sum(t1.amount) 
         from temp as t1
         where t.id = t1.id and t1.bank = 2), 0) as 'bank 2 sum'
  from temp as t
其中temp是您的表名。对于mySQL(感谢评论中的@JakeFeasel):

使用tsql,我能够得出:

select distinct t.id,
      isnull((select sum(t1.amount) 
         from temp as t1
         where t.id = t1.id and t1.bank = 1), 0) as 'bank 1 sum',
      isnull((select sum(t1.amount) 
         from temp as t1
         where t.id = t1.id and t1.bank = 2), 0) as 'bank 2 sum'
  from temp as t
其中temp是您的表名。对于mySQL(感谢评论中的@JakeFeasel):

ANSI解决方案:

Select Id
  , Sum( Case When Bank = 1 Then Amount End ) As Bank1Total
  , Sum( Case When Bank = 2 Then Amount End ) As Bank2Total
From SourceTable
Group By Id
(使用MySQL)

ANSI解决方案:

Select Id
  , Sum( Case When Bank = 1 Then Amount End ) As Bank1Total
  , Sum( Case When Bank = 2 Then Amount End ) As Bank2Total
From SourceTable
Group By Id

(使用MySQL)

我们需要表结构和您当前的查询来帮助您我们需要表结构和您当前的查询来帮助您Op使用的是MySQL,而不是MS SQLHere是一个非常类似的使用MySQL的工具:(只需将isnull更改为ifnull)是的,但我认为这会帮助他找到解决方案。感谢@JakeFeaselOP正在使用MySQL,而不是MS-SQLHere是一个非常类似的fiddle,使用MySQL:(只是必须将isnull改为ifnull)是的,但我认为这会帮助他找到解决方案。谢谢@jakefeasethanks。这起作用了。我之前没想到这个案子。我能够通过if:
选择id,sum(如果bank=1,amount,0)作为bank1total,sum(如果bank=2,amount,0)作为bank2total从表组中按id获得相同的结果,如果案例数量小于3,那么使用
if
案例
@shiplu.mokadd.im-
案例
是ANSI标准。依我看,你应该总是更喜欢ANSI标准,而不是专利解决方案,除非性能差异很大,我怀疑是这样。谢谢。这起作用了。我之前没想到这个案子。我能够通过if:
选择id,sum(如果bank=1,amount,0)作为bank1total,sum(如果bank=2,amount,0)作为bank2total从表组中按id获得相同的结果,如果案例数量小于3,那么使用
if
案例
@shiplu.mokadd.im-
案例
是ANSI标准。在我看来,您应该总是更喜欢ANSI标准而不是专有解决方案,除非性能差异很大,我对此表示怀疑。