长话短说,我有两个单独的查询,我希望将它们组合成一个更好看的问题。我之前用CTE完成了这个,但是我需要使用SSIS&05; 05它不支持CTE或临时表 - 我不能为我的生活找出怎么做没有他们。
就像我说的,我有两个单独的选择'声明。一个用于第一次平均值,另一个用于后续平均值。第一个输出类似于:
Description First_Averages
a) xxx 4.533333
b) xxx 8.238095
c) xxx .5
I) xxx 2
j) xxx 2.25
和我的第二个'选择'声明的输出看起来非常相似:
Description Subsequent_Averages
a) xxx 4.225806
b) xxx 4.393939
c) xxx .1428571
d) xxx 0
f) xxx 0
j) xxx 1.666667
使用CTE,即使值为null(将null替换为0),我也可以显示每个描述,并将它们合并为一个(更好看的)输出。我能用CTE获得的期望输出如下:
Description First_Averages Subsequent_Averages
a) xxx 4.533333 4.225806
b) xxx 8.238095 4.393939
c) xxx .5 .1428571
d) xxx 0 0
e) xxx 0 0
f) xxx 0 0
g) xxx 0 0
h) xxx 0 0
i) xxx 2 0
j) xxx 2.25 1.666667
有没有办法在不使用任何类型的CTE或临时表的情况下执行此操作?
我的前两个代码'选择'陈述如下:
SELECT
description, avg(total_score)
FROM (a long select statement)
WHERE sequence_num = '1'
group by description
order by description;
第二个选择'声明的代码完全相同,除了" sequence_num =' 1'"是" sequence_num<> ' 1'"
如果您想查看FROM代码,我可以更新并包含它。它使这篇文章比现在更长,所以我把它删除了。
我无法找到显示所有描述的方法,包括那些具有空均值的描述,并将平均值加入描述,就像我对CTE一样。
提前感谢您的提示。如果您需要更多信息,请告诉我,我已经在圈子里跑了一段时间试图这样做。
答案 0 :(得分:4)
尝试使用CASE表达式:
SELECT
description,
avg(total_score),
avg( CASE WHEN sequence_num = 1 THEN total_score END ),
avg( CASE WHEN sequence_num <> 1 THEN total_score END )
FROM (a long select statement)
group by description
order by description;
答案 1 :(得分:0)
如果我理解正确,你只想加入两个平均值,并附上所有可能的描述。可以实现这一目标的一种方法是,我看到你提供的内容就是做同样的事情来获得平均值,查询你正在创建的数据集并进行连接。
例如,您可以执行以下操作:
SELECT
a.description
, IFNULL(b.First_Averages,0) as First_averages
, IFNULL(c.Subsequent_Averages,0) as Subsequent_Averages
FROM (
SELECT
description--, avg(total_score)
FROM (a long select statement)
--WHERE sequence_num = '1'
group by description
--order by description;
) a
LEFT JOIN (
SELECT
description, avg(total_score)
FROM (a long select statement)
WHERE sequence_num = '1'
group by description
--order by description;
) b
ON a.description = b.description
LEFT JOIN (
SELECT
description, avg(total_score)
FROM (a long select statement)
WHERE sequence_num <> '1'
group by description
--order by description;
) c
ON a.description = c.description
order by a.description
现在说,这可能不是最好的方法。任何时候我必须查询查询的数据集,我总是试着看看我是否可以简化我正在做的事情。
编辑以解决如何正确加入的完全缺席的心态。 (添加了ON条款)
答案 2 :(得分:0)
根据你得到的输出,我认为描述是一个独特的列。那么,为什么不full outer join
描述列上的表。
select description, coalesce(first_averages,0), coalesce(subsequent_averages,0) from (
select a.*, b.subsequent_averages from
firsttable a full outer join secondtable b
on a.description=b.description)
对于那些不可用的,它将为您提供NULL。但是,coalesce函数将取整数0代替null。
用coalesce编辑。