SQL案例二条件有两列

时间:2017-10-23 06:39:14

标签: sql sql-server-2014

我的数据如下:

"表"计算机数据

HtmlConverter.convertToPdf(
    "<b>This text should be written in bold.</b>", 
    new PdfWriter(new File("C://users/mentre83/output.pdf")));

到e.t.c

date       |    property   |    computer code
----------      --------        -----------
20160131   |   companyA   |     256584
20160131   |   companyB   |     987451

我想在2017年9月之后计算每家公司的电脑数量,所以我使用:

20171020   |   companyA   |     157489

但它不起作用...
请帮助!!

我使用的是SQL Server 2014 Management Studio。和公司系统的数据库

我希望像

一样展示它
select
 computer data

 , count (case computer code when property='companyA' and date='20171001' then 1 else 0 end) as CMAnumber
 , count (case computer code when property='companyB' and date='20171001' then 1 else 0 end) as CMBnumber

from
[data]

group by
computer data

order by
computer data

ETC

抱歉,我对SQL T.T

感到很满意

4 个答案:

答案 0 :(得分:2)

您正在混合两个case表单。

serached表单在when

之后有一个条件
CASE WHEN <condition> ..

简单表单将其拆分:casewhen之间的公共操作数以及when之后的表达式。它暗示了一个等于比较:

CASE <common operand> WHEN <expression> ...

有关案例的更多信息:http://modern-sql.com/feature/case

答案 1 :(得分:1)

如果你想使用CASE来计算某些条件,如果你为它选择COUNT函数,那么部分案例应该是NULL,否则,它会计算其他条件太。或者您应该使用SUM而不是COUNT。我更新了COUNT函数的脚本。

你的案子使用错误,我也纠正了它。

SELECT
 [computer data]
 , count (case when property='companyA' and date >= '20171001' then 1 end) as CMAnumber
 , count (case when property='companyB' and date >= '20171001' then 1 end) as CMBnumber
from
    [data]
where
    date >= '20171001'
group by
    [computer data]
order by
    [computer data]

答案 2 :(得分:0)

这个怎么样:

SELECT property , COUNT(*)
  FROM [data]
 WHERE DATE > '20170930'
GROUP BY property ;

答案 3 :(得分:0)

您可以通过

组合子查询和分组
select property,count(*) from (select * from [computer data] where date > '20170930') group by property