Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL来分隔组并添加引用它们的值_Sql_Sql Server - Fatal编程技术网

SQL来分隔组并添加引用它们的值

SQL来分隔组并添加引用它们的值,sql,sql-server,Sql,Sql Server,我有一个表,其中有它的类别“p”-支付,“R”-接收,“C”-信用,这些类别有它们的值。。。格式如下 Money | Category 5 P 10 R 5 R 20 C 15 P 并将sql的结果作为 P | R | C 20 | 15| 20 如何创建一个sql来生成这3列,而不必执行3个子查询 select sum(money) from accounts -- that adds up all select

我有一个表,其中有它的类别“p”-支付,“R”-接收,“C”-信用,这些类别有它们的值。。。格式如下

Money | Category
5         P
10        R
5         R
20        C
15        P
并将sql的结果作为

P  | R | C
20 | 15| 20
如何创建一个sql来生成这3列,而不必执行3个子查询

select sum(money) from accounts -- that adds up all

select 
(select sum(money) from caixa where category= 'R' ) as 'CR',
(select sum(money) from caixa where category= 'P  ) as 'CP' 
from accounts -- this even works, but it returns me several lines with the same information
您可以尝试使用条件聚合函数而不是子查询

CREATE TABLE caixa (
   Money int,
   Categoty varchar(5)
);

insert into caixa  values (5,'P');
insert into caixa  values (10,'R');
insert into caixa  values (5,'R');
insert into caixa  values (20,'C');
insert into caixa  values (15,'P');
查询

select  sum(CASE WHEN Categoty = 'P' then money else 0 end) P, 
        sum(CASE WHEN Categoty = 'R' then money else 0 end) R, 
        sum(CASE WHEN Categoty = 'C' then money else 0 end) C
from caixa 
WHERE Categoty IN ('P','R','C')

另一个选择是枢轴

示例

Select * 
 From (
       Select [Money]
             ,[Category] 
         From Accounts 
      ) src
 Pivot ( sum([Money]) for [Category] in ([P],[R],[C]) ) pvt
返回

P   R   C
20  15  20

你的数据库管理系统是什么?我使用的是SQL Server。这比我在上面做的相同查询快吗?我认为这会比你的查询快,因为它只搜索
帐户
表一次。但这是基于你有创建索引的能力。你可以在
中添加条件,我认为这可以让它更快。