有一个包含5列的表格:
COL1,COL2,COL3,COL4,MONTHNAME
类似的东西:
col1 | col2 | col3 | col4 | monthName
----------------------------------------
4 | 5 | 55 | 8 | January
4 | 4 | 33 | 6 | February
col1和col2 sum必须与上个月的col4相同。所以我可以比较
select * from table1 where col1+col2=col4 where monthName='February'
但它会比较我想要的所有行,例如
select *
from table1
where col1+col2 = (select col4 from table1 where monthName='January')
where monthName='February'
我是如何以正确的方式做到这一点的?
嗯,这是关于月度报告的事情。
也许我的主要问题是从过去一个月(例如1月)获得col4。
我想更清楚地解释一下:
我很容易得到col1和col2:
选择sum(col1 + col2)作为table1中的currentTotal,其中monthName ='February'
但我如何从上个月获得col4值并将其存储在某处然后与currentTotal进行比较?每个月都会插入15行,并将与上个月进行比较。
不确定这次我是否解释得更好!
答案 0 :(得分:1)
月份命名可疑,但根据我们掌握的信息,以下内容应该可以解决问题:
-- Creating a table variable as a sample for your query.
DECLARE @T TABLE (col1 INT, col2 INT, col3 INT, col4 INT, monthName VARCHAR(25))
INSERT INTO @T VALUES (4,4,55,9,'January'),(5,4,3,6,'February'), (3,3,3,6,'March')
-- Update the references to your actual table in this query.
;WITH CTE AS (SELECT *
, DATEPART(MM,monthName+' 01 2014') Mnum
FROM @T)
SELECT CA.*
FROM CTE C
CROSS APPLY
(SELECT col1, col2, col3, col4, monthName
FROM CTE B
WHERE B.Mnum-1 = C.Mnum AND (B.col1+B.col2 = C.col4)) CA
ORDER BY Mnum
它的作用是,它为月份名指定一个数字,然后按月份号的顺序使用该集合,而CROSS APPLY仅选择col1和2之和的行等于上个月数的col4。< / p>
答案 1 :(得分:0)
您可以尝试下面的伪代码
select *
from table1 t1
join
(
select monthName, SUM(col1+col2-col4) as isZero
group by monthName
) as t2
on t2.monthName = t1.monthName
where t2.isZero != 0