Sql 使用另一个表中的运算符根据参数更新数据
我有两个表,其中包含以下示例数据:Sql 使用另一个表中的运算符根据参数更新数据,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有两个表,其中包含以下示例数据: tblSale PartCode PartGroup SaleQty a FM 600 b MM 202 c SM 10 d NM 0 tblCondition PartGroup Condition FM >500 MM >=200 SM >=1 NM 0 在SQL Server存储过程中,我想根据sum(SaleQty)更新tblSal
tblSale
PartCode PartGroup SaleQty
a FM 600
b MM 202
c SM 10
d NM 0
tblCondition
PartGroup Condition
FM >500
MM >=200
SM >=1
NM 0
在SQL Server存储过程中,我想根据sum(SaleQty)
更新tblSale
中的PartGroup
并与条件进行比较
请帮忙
更新:
例如:
零件代码“A”具有PartGroup='FM'和SaleQty=500。
如果SaleQty=400,则根据TBL条件中的条件更新PartGroup='MM'
UPDATE tblSale
SET tblSale.PartGroup=tblCondition.PartGroup
WHERE SUM(tblSale.Sale) ??? tblCondition.Condition
用这个
update ts set partGroup = something
from tblSale ts
inner join tblCondition tc
on tc.PartGroup=ts.PartGroup
inner join (Select PartGroup, sum(SaleQty) as SumSaleQty
from tblSale
group by PartGroup) as sums
on sums.PartGroup = tc.PartGroup
and sums.SumSaleQty >= tc.Condition
我认为如果没有动态代码,您将无法做到这一点
对于我的解决方案,您需要做一些更改/注意:
- 将零件组
NM
条件0
更改为=0
- 确保TBL条件表条件从最大值(500)插入到最小值(0)
首先,我要做的是为tblCondition表中的每一行创建CASE
然后我通过PartCode
(我将PartCode
“c”拆分为两行进行测试)将数据汇总到临时表中
最后,创建动态代码,它将更新数据
/*
CREATE TABLE #tblSale ( PartCode VARCHAR(10), PartGroup VARCHAR(10), SaleQty INT)
INSERT INTO #tblSale SELECT 'a', 'FM', 600
INSERT INTO #tblSale SELECT 'b', 'MM', 202
INSERT INTO #tblSale SELECT 'c', 'SM', 5
INSERT INTO #tblSale SELECT 'd', 'NM', 0
INSERT INTO #tblSale SELECT 'c', 'SM', 5
CREATE TABLE #tblCondition ( PartGroup VARCHAR(10), Condition VARCHAR(10))
INSERT INTO #tblCondition SELECT 'FM', '>500'
INSERT INTO #tblCondition SELECT 'MM', '>=200'
INSERT INTO #tblCondition SELECT 'SM', '>=1'
INSERT INTO #tblCondition SELECT 'NM', '=0'
*/
--CREATE CASES
DECLARE @CaseStr NVARCHAR(1000) = 'CASE '
SELECT @CaseStr = @CaseStr + '
WHEN SaleSUM ' + Condition + ' THEN '''+ PartGroup + ''' '
FROM #tblCondition
SET @CaseStr = @CaseStr + ' END'
-- SUM data by PartCode
SELECT PartCode, SUM(SaleQty) AS SaleSUM
INTO #tblSaleSUM
FROM #tblSale
GROUP BY PartCode
-- Create dynamic code for update
DECLARE @query NVARCHAR(MAX)
SET @query = N'
UPDATE S
SET S.PartGroup = SS.PartGroup
FROM #tblSale AS S
INNER JOIN
(
SELECT PartCode, ' + @CaseStr + ' AS PartGroup
FROM #tblSaleSUM
) AS SS
ON SS.PartCode = S.PartCode
'
EXEC sp_executesql @query
解释清楚。更新什么?使用tblCondition中的参数更新tblSale中的零件组。如果sum(SaleQty)>500,那么PartGroup=FM,如果sum(SaleQty)>=200,那么PartGroup=MM,…存储在条件下的数据类型/数据是什么?您希望最终结果集是什么样的?您尝试过哪些查询不起作用?Contion字段是NVARCHAR(50),因为它有数据'>500','>=200'。此字段是参数的用户输入获取此总和sum(SaleQty)
您将哪个列分组<代码>零件代码
?请学习设置答案的格式。这个问题有点不清楚,所以我不确定这是询问者需要的…我正在用手机写信,不幸的是,我也无法格式化我的信息。我将格式化答案,然后再拿到电脑)让我们等待提问者对我答案的决定。