Sql 自联接为上个月生成不一致的值
为了在同一行中显示上个月的一些记录,我必须像这样将我的表连接到表本身:Sql 自联接为上个月生成不一致的值,sql,tsql,join,Sql,Tsql,Join,为了在同一行中显示上个月的一些记录,我必须像这样将我的表连接到表本身: SELECT a.[periodOrderNum] ,SUM(a.AktivNy) as ActiveNew ,SUM(b.[AktivNy]) as ActiveNewPrevMonth FROM myTable a JOIN myTable b ON a.customerSNKey = b.customerSNKey AND a.periodOrderNum
SELECT
a.[periodOrderNum]
,SUM(a.AktivNy) as ActiveNew
,SUM(b.[AktivNy]) as ActiveNewPrevMonth
FROM myTable a
JOIN myTable b
ON a.customerSNKey = b.customerSNKey
AND a.periodOrderNum = b.periodOrderNum + 1
GROUP BY a.[periodOrderNum]
SELECT a.[periodOrderNum]
,a.ActiveNew
,b.ActiveNewPrevMonth
FROM
(
SELECT
customerSNKey, [periodOrderNum]
,SUM(AktivNy) as ActiveNew
FROM myTable
GROUP BY customerSNKey, [periodOrderNum]
) AS a
INNER JOIN
(
SELECT
customerSNKey, [periodOrderNum] + 1 as [periodOrderNum]
,SUM(AktivNy) as ActiveNewPrevMonth
FROM myTable
GROUP BY customerSNKey, [periodOrderNum] + 1
) AS b
ON a.customerSNKey = b.customerSNKey
AND a.[periodOrderNum] = b.[periodOrderNum]
在上述代码中,periodOrderNum是分配给period的订单号。例如,如果当前期间为5,则前一期间的订单号为4
而customerSNKey
是客户的序列号密钥,我将其用作我的JOIN
条件之一。另一个条件(a.periodOrderNum=b.periodOrderNum+1
)用于获取上一个期间的值。但结果并不一致。如下图所示,对于订单号280,ActiveNewPrevMonth
的值为20203,而不是订单号279的ActiveNew
值
我在加入时做错了什么?没有一些示例数据,我无法判断哪里出错了。但不管怎样,我相信您在这里的查询都会返回错误的值。假设您在同一
periodOrderNum
下有多行,那么您的ActiveNew
值肯定会被夸大。试着将它们分成如下子查询如何:
SELECT
a.[periodOrderNum]
,SUM(a.AktivNy) as ActiveNew
,SUM(b.[AktivNy]) as ActiveNewPrevMonth
FROM myTable a
JOIN myTable b
ON a.customerSNKey = b.customerSNKey
AND a.periodOrderNum = b.periodOrderNum + 1
GROUP BY a.[periodOrderNum]
SELECT a.[periodOrderNum]
,a.ActiveNew
,b.ActiveNewPrevMonth
FROM
(
SELECT
customerSNKey, [periodOrderNum]
,SUM(AktivNy) as ActiveNew
FROM myTable
GROUP BY customerSNKey, [periodOrderNum]
) AS a
INNER JOIN
(
SELECT
customerSNKey, [periodOrderNum] + 1 as [periodOrderNum]
,SUM(AktivNy) as ActiveNewPrevMonth
FROM myTable
GROUP BY customerSNKey, [periodOrderNum] + 1
) AS b
ON a.customerSNKey = b.customerSNKey
AND a.[periodOrderNum] = b.[periodOrderNum]
很难说,因为所有的数据都没有显示出来。我将在不使用联接的情况下运行查询,并使用“and periodOrderNum=280”查看它试图求和的值,只是为了确保。你能把这些结果添加到你的问题中吗?制作一些数据并显示DDL、输入、输出和预期输出。阅读并付诸行动。如果没有上个月的数据怎么办?对不起。无法访问db atm。我会尽快回复你的。嗨,很抱歉耽搁了这么久。您的查询只给了我0和1作为
ActiveNew
和ActiveNewPrevMonth
。我希望我能帮你提供一些样本数据,但恐怕我不能。