有人可以帮助我解决以下两个陈述之间的区别。他们俩都给我相同的结果吗?
SELECT
COUNT( CASE WHEN DischargeDate > '20130609' and DischargeDate < '20140101' THEN Encounter END) as '1case'
COUNT( CASE WHEN DischargeDate > '20130509' and DischargeDate < '20131201' THEN Encounter END) as '2case'
COUNT( CASE WHEN DischargeDate > '20130409' and DischargeDate < '20131101' THEN Encounter END) as '3case'
FROM Table 1
SELECT
COUNT( CASE
WHEN DischargeDate > '20130609' and DischargeDate < '20140101' THEN Encounter
WHEN DischargeDate > '20130509' and DischargeDate < '20131201' THEN Encounter
WHEN DischargeDate > '20130409' and DischargeDate < '20131101' THEN Encounter )
END AS 'CaseValues'
FROM Table 1
你能解释一下上面代码之间的区别吗?结果如何变化?如果我将计数更改为SUM怎么办?
我想结果这样的事情。
日期范围
(DischargeDate&gt;'20130609'和DischargeDate&lt;'20140101')我将其称为1
DischargeDate&gt; '20130509'和DischargeDate&lt; '20131201'我将其称为2
DischargeDate&gt; '20130409'和DischargeDate&lt; '20131101'我将其称为3
我想要上述每一项的遭遇计数。
Result like :
EncounterCount Date
30 1
45 2
20 3
答案 0 :(得分:2)
第一个语句将返回包含1行和3列的结果集:
count()
时Encounter
的{{1}} DischargeDate
时count()
的{{1}} Encounter
时DischargeDate
的{{1}} 请注意,这些日期中的每个日期都排除在第一天的午夜 - 考虑您是否需要&gt; =而不是&gt;。
第二个选择将返回一行结果,其中包含1行和 1 列,这是{2013年4月9日至12月31日期间count()
的{{1}} - 即所有其中任何一个时期的下降。
Encounter
是非空值的数量。假设DischargeDate
是某种形式的数字列,将count()
更改为Encounter
将为您提供count()
列中所有非空值的总和。
鉴于更新后问题中的信息,我建议如下:
Encounter
当然,而不是CTE中的硬编码值(主count()
之前的sum()
表达式),您可以使用表格或某种方式生成日期。
答案 1 :(得分:1)
查询为自己回答问题。第一个查询是每个case语句的单独计数。因此,您将在该查询的结果中包含3列。
第二个查询是所有case语句的结果集的计数,并且将得到仅1列和1行的结果集。
这取决于您要实现的目标,但如果要求是灵活的,那么这也可以通过条件轻松完成。
更新了问题的答案
create #temp (Encounter int, Date int)
insert into #temp
select count (*) , '1'
from Mytable
where DischargeDate > '20130609' and DischargeDate < '20140101'
union all
select count (*) , '2'
from Mytable
where DischargeDate > '20130509' and DischargeDate < '20131201'
union all
select count (*) , '3'
from Mytable
where DischargeDate > '20130409' and DischargeDate < '20131101'
select * from #temp
drop table #temp
答案 2 :(得分:1)
它们将平凡地产生不同的结果,因为第一个查询中的三个表达式使用重叠的日期范围 - 因此同一行可能会多次计数。而在第二个查询中,每行只能计算一次。
考虑3行:
DischargeDate, Encounter
20130901 , 1
20130410 , 1
20131231 , 1
第一个查询将返回:
2, 1, 2
第二个查询将返回:
3
我无法与那些我通常熟悉的任何平等概念相协调。