Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用另一个表中的运算符根据参数更新数据_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

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)
您将哪个列分组<代码>零件代码
?请学习设置答案的格式。这个问题有点不清楚,所以我不确定这是询问者需要的…我正在用手机写信,不幸的是,我也无法格式化我的信息。我将格式化答案,然后再拿到电脑)让我们等待提问者对我答案的决定。