【发布时间】:2014-05-21 04:29:03
【问题描述】:
我有一个包含以下字段(很少)的简单表格
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 做到这一点?
谢谢 萨默斯
【问题讨论】:
-
如果我是你,想想新的一年会以无情的方式出现,我会规范化我的数据。
标签: sql sql-server