关闭。这个问题需要更加突出重点。它目前不接受答案。
**想改进这个问题吗?**通过编辑这篇文章更新这个问题,使它只关注一个问题。
昨天关门了。
改进这个问题
我遇到了一个问题,当我有多个列的总和聚合导致多行形成,而不是只有一个。每个代码单独运行时,只会产生一行,但一旦我有多个聚合,它就会成倍增加;所有相同的值。
下面是我的代码现在的大致示例:
SELECT
(SELECT (SUM(Units * Price)
FROM SalesDetail
WHERE CONVERT(VARCHAR(10), DATEADD(day, CONVERT(int, JulianDate) - ((1000*(CONVERT(int, JulianDate) / 1000))) - 1, DATEADD(year, CONVERT(int, JulianDate / 1000), '1 Jan 1900')), 111) LIKE '2018%' G AS ‘2018 Sales’,
(SELECT (SUM(Units * Price)
FROM SalesDetail
WHERE CONVERT(VARCHAR(10),DATEADD(day, CONVERT(int,JulianDate)-((1000*(CONVERT(int,JulianDate)/1000)))-1, DATEADD(year,CONVERT(int,JulianDate/1000),'1 Jan 1900')),111) like '2019%' as ‘2019 Sales’
FROM
SalesDetail
我意识到我可以使用top 1来减少这些,但是我需要对这个查询做进一步的分析,这个查询将被那个编码破坏
我试着在每一列中单独添加前1个,但仍然会出现倍数。
2条答案
按热度按时间f0brbegy1#
看起来您应该使用条件聚合,并且只对
SalesDetail
一张table。我无法测试这个-但是我相信这是你需要的hof1towb2#
听起来你只是想摆脱
FROM SalesDetail
部分,在查询主体的底部。现在,它正在选择
SalesDetail
(主要FROM
条款,没有WHERE
条款)。对于这些行中的每一行,所选列都由生成聚合的两个子查询组成。所以,它显示了总次数-存在于中的每一行一次SalesDetail
.卸下主泵
FROM
子句将导致子查询只运行一次,并且只生成一行。