多个SQL SELECT语句的聚合
我有一张表多个SQL SELECT语句的聚合,sql,sql-server,Sql,Sql Server,我有一张表表1如下: |--------------|--------------|--------------| | POS | TYPE | VOLUME | |--------------|--------------|--------------| | 1 | A | 34 | | 2 | A | 2 | |
表1
如下:
|--------------|--------------|--------------|
| POS | TYPE | VOLUME |
|--------------|--------------|--------------|
| 1 | A | 34 |
| 2 | A | 2 |
| 1 | A | 12 |
| 3 | B | 200 |
| 4 | C | 1 |
|--------------|--------------|--------------|
我想得到这样的东西(表2
):
到目前为止,我的代码是:
SELECT
(SELECT COUNT(TYPE)
FROM TABLE1
WHERE TYPE = 'A') AS [Amount_A]
,(SELECT COUNT(TYPE)
FROM TABLE1
WHERE TYPE = 'B') AS [Amount_B]
,(SELECT COUNT(TYPE)
FROM TABLE1
WHERE TYPE = 'C') AS [Amount_C]
,(SELECT SUM(VOLUME)
FROM TABLE AS [Sum_Volume]
INTO [TABLE2]
现在有两个问题:
POS
的区别包括在内类型
我正在使用MSSQLServer。您的第一列应该是POS,您将按POS分组 这将为每个POS值提供一行,并相应地聚合(计数和求和) 您还可以使用CASE语句而不是subselect。例如,而不是:
(SELECT COUNT(TYPE)
FROM TABLE1
WHERE TYPE = 'A') AS [Amount_A]
使用:
您的第一列应该是POS,您将按POS分组 这将为每个POS值提供一行,并相应地聚合(计数和求和) 您还可以使用CASE语句而不是subselect。例如,而不是:
(SELECT COUNT(TYPE)
FROM TABLE1
WHERE TYPE = 'A') AS [Amount_A]
使用:
您需要的是使用
分组依据
,以及聚合函数。因此,这导致:
USE Sandbox;
GO
CREATE TABLE Table1 (Pos tinyint, [Type] char(1), Volume smallint);
INSERT INTO Table1
VALUES (1,'A',34 ),
(2,'A',2 ),
(1,'A',12 ),
(3,'B',200),
(4,'C',1 );
GO
SELECT Pos,
COUNT(CASE WHEN [Type] = 'A' THEN [Type] END) AS Amount_A,
COUNT(CASE WHEN [Type] = 'B' THEN [Type] END) AS Amount_B,
COUNT(CASE WHEN [Type] = 'C' THEN [Type] END) AS Amount_C,
SUM(Volume) As Sum_Volume
FROM Table1 T1
GROUP BY Pos;
DROP TABLE Table1;
GO
如果
[Type]
有一个未定义的变量值,那么您很可能需要使用动态SQL。您要寻找的是使用分组依据以及聚合函数。因此,这导致:
USE Sandbox;
GO
CREATE TABLE Table1 (Pos tinyint, [Type] char(1), Volume smallint);
INSERT INTO Table1
VALUES (1,'A',34 ),
(2,'A',2 ),
(1,'A',12 ),
(3,'B',200),
(4,'C',1 );
GO
SELECT Pos,
COUNT(CASE WHEN [Type] = 'A' THEN [Type] END) AS Amount_A,
COUNT(CASE WHEN [Type] = 'B' THEN [Type] END) AS Amount_B,
COUNT(CASE WHEN [Type] = 'C' THEN [Type] END) AS Amount_C,
SUM(Volume) As Sum_Volume
FROM Table1 T1
GROUP BY Pos;
DROP TABLE Table1;
GO
如果您的[Type]
有一个未定义的变量值,那么您很可能需要使用动态SQL。了解Pivot。了解Pivot。这是一个比我更全面的答案。这是一个比我更全面的答案。向上投票。