【问题标题】:SQL query to fetch data from one table with different conditionSQL查询以从具有不同条件的一张表中获取数据
【发布时间】:2014-03-18 21:20:37
【问题描述】:

我是 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 是我的 where 条件。

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

我通过联合来执行此操作,但我认为这需要更多时间。所以请给我任何其他的解决方案。

SQL Fiddle

【问题讨论】:

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


    【解决方案1】:

    不需要UNION

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

    SQL Fiddle

    【讨论】:

    • 谢谢,但有时 TotalFlagC = where status in ('C','H','G') 然后怎么办..
    • 我可以重命名第一列中的行名吗?表示 TotalFlagC = TotalCredit,TotalFlagS = TotalSuccess,TotalFlagE = 其他。
    • 是的,为此使用CASE
    【解决方案2】:

    select distinct 'TotalFlag'+' '+Status,count(distinct DebitNoteNo)DEBITNOTENO ,count(LineNumber)TotalLineItem ,sum(TotalAmt)TotalCount 从数据表按状态分组

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-11
      • 2013-06-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多