SQL查询从一个具有不同条件的表中获取数据

时间:2014-03-18 12:49:13

标签: sql sql-server sql-server-2008-r2 sql-server-2012

我是SQL开发人员的初学者并尝试进行此类查询 我只有一个表中的所有数据。现在我想按计算数据。

表结构如下:

Create table DataTable
(
id numeric(18,0),
DebitNoteNo varchar(20),
TotalAmt numeric(18,0),
Status char(4),
LineNumber numeric(18,0)  
) 

Insert into DataTable values(1,'DB001',200,'C',1)
Insert into DataTable values(2,'DB001',100,'C',2)
Insert into DataTable values(3,'DB001',300,'C',2)

Insert into DataTable values(4,'DB002',500,'C',1)
Insert into DataTable values(5,'DB002',100,'C',4)

Insert into DataTable values(6,'DB003',200,'S',2)
Insert into DataTable values(7,'DB003',300,'S',4)
Insert into DataTable values(8,'DB003',400,'S',5)

Insert into DataTable values(9,'DB003',200,'C',1)
Insert into DataTable values(10,'DB003',100,'C',3)
Insert into DataTable values(11,'DB003',700,'C',8)
Insert into DataTable values(12,'DB003',100,'C',5)

Insert into DataTable values(13,'DB004',800,'E',1)
Insert into DataTable values(14,'DB004',100,'E',5)
Insert into DataTable values(15,'DB004',200,'E',6)

我想要输出如下:

            Distinct
Col1        DebitNoteNoCount   TotalLineItem    TotalCount 
TotalFlagC    3                   9               2300
TotalFlagS    1                   3               900
TotalFlagE    1                   3               1100

现在在此输出中 第1列是固定的,
第2列是不同借记的计数注意号 第3列是总行数 第4列是TotalAmt的总和

我的行也是固定的(三行)

col1是我的条件ex。

TotalFlagC =  where status = 'C'
TotalFlagS =  where status = 'S'

我用联盟这样做,但我认为需要更多时间。所以请给我任何其他解决方案。

SQL Fiddle

2 个答案:

答案 0 :(得分:1)

无需UNION

SELECT CONCAT('TotalFlag',STATUS), 
       COUNT(DISTINCT DEBITNOTENO), 
       COUNT(LineNumber) AS TotalLineItem,
       SUM(TOTALAMT) AS TotalCount
  FROM DataTable
GROUP BY
       STATUS;

SQL Fiddle

答案 1 :(得分:0)

选择不同的' TotalFlag' +' ' +状态,计数(不同的DebitNoteNo)DEBITNOTENO,count(LineNumber)TotalLineItem,sum(TotalAmt)TotalCount 来自DataTable group by Status