sql - 如何在 SQL 中的循环中进行循环,类似于 for-each 循环?

标签 sql tsql loops cursor

我倾诉了许多问题和答案,但似乎找不到适合我的解决方案。这是我想要做的:

假设我有一个名为“Store”的表,其中包含商店 ID、商店名称和该商店的年销售额。企业希望每家商店的销售额在下一年增加 50%,并希望计算每家商店需要达到的每月目标销售额才能实现 50% 的增长。例如,如果 5 号商店去年的销售额为 1000 美元,那么明年年底的目标将是 1500 美元。为了达到这个目标,每个月的金额需要是 1042 美元、1084 美元、1126 美元……1500 美元。

我想要做的是将每个商店的 12 条记录插入到“每月计划事实”表中。我正在尝试从 Store 表中选择一家商店,获取年销售额,然后在其中执行一个循环,在其中计算每个月的值(value),以便我可以将其插入到“每月计划事实”表中,然后选择存储表中的下一个存储...等等。作为 C# 开发人员,这似乎是一项非常简单的任务,可以通过在其中包含另一个“for”循环的“for each”样式循环来完成。

但是我一生都无法弄清楚如何在 SQL 中执行此操作。我知道临时表,但我似乎无法弄清楚如何使用 Store 表中的记录将多行插入到我的“月度计划事实”表中,以及在循环中计算的值以确定月度计划值.我已经阅读了一些关于游标的内容,但似乎大多数人在 SQL 社区中都反对它们,所以我对这个感到茫然。

最佳答案

下面的 T-SQL 显示了如何真正轻松地获得每个商店每个月的销售目标。我在这里包含了两列:一列名为“salesTargetYourExample”,其中我们有一个模式,如 1042、1084、......表示销售目标,另一列名为“linearGrowthSales”,其中我们有新的年度销售目标(例如,1500 表示商店去年赚了 1000),然后简单地看看每个月末的销售额应该是多少才能达到假设线性增长的目标)。

简短的回答是在使用数据库时始终考虑集合和基于集合的操作。不要从循环的角度考虑

-- Create the store table
create table dbo.Store
(
    storeId int not null primary key clustered,
    storeName varchar(100) not null,
    annualSales money not null
);

-- Populate the data in the store table
insert into dbo.Store(storeId,storeName,annualSales)
values (1, 'My first store', 2000),
    (5, 'Store number five', 1000),
    (6, 'The sixth store', 2500);


-- Get the sales targets for each store on a monthly basis
select s.storeId, s.storeName, months.mth,
    (s.annualSales * 0.5 * months.mth/12) + s.annualSales as salesTargetYourExample,
    s.annualSales * 1.5 * months.mth/12 as linearGrowthSales
from dbo.Store as s
cross apply
(
    values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)
) as months(mth)

关于sql - 如何在 SQL 中的循环中进行循环,类似于 for-each 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23437257/

相关文章:

sql - ORACLE SQL : Use a SELECT statement to pass a value to a function parameter

sql - 如何在存储过程中调用存储过程(带2个参数)?

java - JOOQ批量删除ID列表的记录

sql-server - 如何获取mssql中字符串列的不同字符?

javascript - 从 JSON 对象读取值

sql - SQL弱关联表字段映射

sql - 帮助优化 SQL While 循环

mysql - 如何在表中加载动态 XML 数据

c - 为什么这段代码总是给出这个错误?语法错误: Bad for loop variable

php - 在 php 中循环 - 创建不同的卷号