我有一个包含以下字段的简单表格(其中很少)
CustomerID,OrderNumber,TaxYear2013,TaxYear2012,TaxYear2011,FormType(以及其他一些字段)。
一位客户可能已请求不同的表格类型(税务明细)。所以数据可能就像这样
Customer# Order# TaxYear2013 TaxYear2012 TaxYear2010 FormType
1111 100 True True True 4
1111 101 True True True 5
2222 102 True False True 4
3333 103 True False True 4
我需要使用以下条件的订单数量(Count(Order#))。 如果任何TaxYear为真,则将其计为一。 (这意味着,第一行将具有3 +第二行= 3 +第三行= 2 +第四行= 2)。 所以目前有10个订单(每年计数一个)。
这很简单,我使用此查询计算。
SELECT
(SELECT Count(OrderNumber) From tblOrder Where TaxYear2013 =1 )
+
(SELECT Count(OrderNumber) From tblOrder Where TaxYear2012 =1 )
+
(SELECT Count(OrderNumber) From tblOrder Where TaxYear2011 =1 )
+
(SELECT Count(OrderNumber) From tblOrder Where TaxYear2010 =1 )
as TotalYearsOrdered
但是,我需要根据FormType过滤掉一行中的记录并从另一行中计数。
如果formType = 4且formType = 5,则仅计算FormType = 4的订单(基于上述查询),并忽略同一客户的FormType = 5的行。但如果没有FormType = 4的行,则按原样计算。
基于以上数据,我们应该忽略第2行,因为同一客户的FormType = 5和4(所以我们只应该考虑FormType = 4的行中的数据)。
有没有简单的方法可以通过SQL做到这一点?
感谢 Sameers
答案 0 :(得分:1)
这个SQL:
select *
, (y.TaxYear2013+y.TaxYear2012+y.TaxYear2010) as OrderCount
from (
select *
, (select top 1 TaxYear2013 from taxes t2 where t2.customerNo = z.customerNo order by formtype) as TaxYear2013
, (select top 1 TaxYear2012 from taxes t2 where t2.customerNo = z.customerNo order by formtype) as TaxYear2012
, (select top 1 TaxYear2010 from taxes t2 where t2.customerNo = z.customerNo order by formtype) as TaxYear2010
from (
select distinct customerNo
from taxes t
) z
) y
将产生此输出:
customerNo TaxYear2013 TaxYear2012 TaxYear2010 OrderCount
1111 1 1 1 3
2222 1 0 1 2
3333 1 0 1 2
这是我的测试数据库设置:
use tryme
GO
drop table taxes
go
create table taxes (
id int identity(1,1) primary key
, customerNo int
, OrderNo int
, TaxYear2013 int
, Taxyear2012 int
, taxyear2010 int
, formtype int
)
GO
insert into taxes (customerNo, OrderNo, TaxYear2013, Taxyear2012, taxyear2010, formtype) values (1111,100,1,1,1,4)
insert into taxes (customerNo, OrderNo, TaxYear2013, Taxyear2012, taxyear2010, formtype) values (1111,101,1,1,1,5)
insert into taxes (customerNo, OrderNo, TaxYear2013, Taxyear2012, taxyear2010, formtype) values (2222,103,1,0,1,4)
insert into taxes (customerNo, OrderNo, TaxYear2013, Taxyear2012, taxyear2010, formtype) values (3333,104,1,0,1,4)
GO
select * from taxes
如果这不能解决您的问题,请告诉我。
RosSQL.BlogSpot.com