【问题标题】:Update a column with count from another table: My query is not working. I am getting an error使用另一个表中的计数更新列:我的查询不起作用。我收到一个错误
【发布时间】:2021-08-09 18:18:29
【问题描述】:

记分卡表:

lsp werks Success
AAA ZZZ
BBB YYY
CCC XXX

库存表:

lsp werks Status
AAA ZZZ SUCCESS
AAA ZZZ SUCCESS
AAA ZZZ SUCCESS
AAA ZZZ SUCCESS
BBB YYY SUCCESS
BBB YYY SUCCESS
BBB YYY SUCCESS
BBB YYY FAILURE

我想编写一个查询来更新 Scorecard 表,其中包含已定义 lsp 上 Inventory 表中的成功计数

这是我在 SQL Server 中的查询:

UPDATE [Scorecard] 
SET Success = (SELECT COUNT([INVENTORY].[Status]) 
               FROM [INVENTORY]  
               WHERE [INVENTORY].STATUS = SUCCESS 
                 AND [INVENTORY].[werks] = [Scorecard].[werks])

【问题讨论】:

  • 你的问题到底是什么?请edit您的问题并添加一些详细信息。
  • 一般情况下您不应该存储此类信息;一旦插入、更新或删除行,COUNT 值就会过期。这意味着您要么经常有过时的数据,要么必须有一些流程来不断更新表,要么实现触发器。你最好创建一个VIEW
  • 同意拉努。如果读取性能有问题,请使用索引视图。

标签: sql sql-server tsql


【解决方案1】:

这是一种可能的方式。 werk的分区我已经算过了。

 SELECT 
  COUNT (1) OVER (PARTITION BY Werks ORDER by   lsp ) AS [num]
  ,Werks
 INTO #Temp_A
 FROM       [INVENTORY] 
 WHERE [Status] ='SUCCESS'


UPDATE A
   SET Success = B.num
 FROM  [Scorecard] A
 INNER JOIN  #Temp_A B ON A.Werks =  B.Werks 

DROP TABLE #Temp_A

【讨论】:

    【解决方案2】:

    正如 cmets 中提到的,存在一个很大的设计问题,但要回答您的问题:

    UPDATE [Scorecard] 
    SET Success = (
            SELECT COUNT(*) 
            FROM [INVENTORY]  
            WHERE [INVENTORY].STATUS = 'SUCCESS'
            AND [INVENTORY].[werks] = [Scorecard].[werks]
            AND [INVENTORY].[lsp] = [Scorecard].[lsp]
                  )
    

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-22
      • 2011-01-28
      • 2015-01-29
      相关资源
      最近更新 更多