使用SQL While循环

时间:2017-12-19 15:35:31

标签: sql-server tsql while-loop

我编写了一个SQL查询,它连接两个表并计算两个变量之间的差异。我想要一个while循环遍历代码,并为组织编号列表orgnr执行此过程。

Use Intra;
drop table #Tabell1 
go


select Månad = A.Manad, Intrastat = A.varde, Moms = B.vardeutf
into #Tabell1 
From
IntrastatFsum A
join
Momsuppg B
    on A.Orgnr = B.Orgnr
where A.Orgnr = 165564845492
AND A.Ar = 2017
AND B.Ar = A.AR
--AND A.Manad = 11
AND A.Manad = B.Manad
AND A.InfUtf = 'U'
order by A.Manad

select *, Differens = (Intrastat - Moms)/ Moms from #Tabell1 

我在哪里放置while循环,我该怎么写呢?我没有很多SQL经验,所以感谢任何帮助。

当发布这个问题非常匆忙时,

根本不清楚,所以对不起。但我想要做的是: 此代码仅运行一些数据,计算特殊公司的差异%。每个月我们都会得到一些公司列表,这些公司对某些变量显示出高标准差。所以我们必须仔细检查并将报告的价值与税收回报进行比较。我想要做的是编写一个代码来比较" Intra"这是报告的价值和"妈妈"这是报税额。那部分我已经完成了我现在需要做的就是在代码中插入一个循环,通过列表而不是我为某些变量显示高std的公司存储了orgnr。我希望它保留一个列表报告价值和税收回报之间的差异很大的公司,所以我可以多看看它们。因为有时税收回报和报告的价值几乎相同,所以我尝试用自动化删除最明显的案例

3 个答案:

答案 0 :(得分:2)

我认为您的查询中不需要循环。

尝试更改where-clause:

where A.Orgnr = 165564845492

对此:

where A.Orgnr in (165564845492, 123, 456, 678)

答案 1 :(得分:0)

在where子句中删除A.Orgnr = 165564845492,不需要循环

Use Intra;
drop table #Tabell1 
go


select Månad = A.Manad, Intrastat = A.varde,Moms = B.vardeutf
into #Tabell1 
From
IntrastatFsum A
join
Momsuppg B
    on A.Orgnr = B.Orgnr
where  A.Ar = 2017
AND B.Ar = A.AR
--AND A.Manad = 11
AND A.Manad = B.Manad
AND A.InfUtf = 'U'
order by A.Manad

select *, Differens = (Intrastat - Moms)/ Moms from #Tabell1 

答案 2 :(得分:0)

问题不明确(对我而言)

select Månad = A.Manad, Intrastat = A.varde, Moms = B.vardeutf 
     , Differens = (A.varde - B.vardeutf) / B.vardeutf
From
IntrastatFsum A
join
Momsuppg B
    on A.Orgnr = B.Orgnr
   AND A.Orgnr in (165564845492, ...)
   AND A.Ar = 2017
   AND A.Manad = B.Manad
   AND A.InfUtf = 'U'
order by A.Manad