Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 server 具有复杂逻辑的SQL Server更新_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql server 具有复杂逻辑的SQL Server更新

Sql server 具有复杂逻辑的SQL Server更新,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我有一个表需要更新为Y值,但是这个更新是基于其他表的一些结果,我不知道如何做 基本上,我需要完成以下检查 我需要从需要更新的表中检查另一个表是否正好有19个匹配行 在这些匹配行中,其中一个字段不为空 我还有另外两个表,我需要检查后一个表中是否存在记录,并确保后一个表中的匹配记录在其中一个字段中不包含“Y”值 我的方法是使用工会,但我希望有人能告诉我这种方法是否正确,或者是否有更好的方法: SELECT '1' FROM t_A_Outbound Where NOT HEADER IN (Sele

我有一个表需要更新为Y值,但是这个更新是基于其他表的一些结果,我不知道如何做

基本上,我需要完成以下检查

  • 我需要从需要更新的表中检查另一个表是否正好有19个匹配行
  • 在这些匹配行中,其中一个字段不为空
  • 我还有另外两个表,我需要检查后一个表中是否存在记录,并确保后一个表中的匹配记录在其中一个字段中不包含“Y”值
  • 我的方法是使用工会,但我希望有人能告诉我这种方法是否正确,或者是否有更好的方法:

    SELECT '1'
    FROM t_A_Outbound
    Where NOT HEADER IN (Select HEADER FROM t_B_Outbound)
    
    UNION
    
    SELECT '1'
    FROM t_A_Outbound
    Where HEADER IN (Select HEADER FROM t_B_Outbound
                     WHERE NOT INCOMPLETE ='Y')
    
    UNION
    
    Select '1'
    From t_C_Outbound
    Where ValueString = ''
    
    UNION
    
    Select '1'
    From t_C_Outbound
    WHERE Exists(Select Count(key), HEADER
                 From t_C_Outbound IN (SELECT HEADER FROM table_that_needs_updating)
                 Group By HEADER
                 Having NOT Count(Cast(key as Int)) = 19)
    
    我考虑使用1作为标志,表示该值是否返回以更新表中需要更改的字段


    谁能给我一些建议吗?

    我不清楚工会为你们做了什么

    您需要类似以下内容的更新语句:

    update table
        set y = . . .
        where header in (Select header
                         From t_C_Outbound
                         Group By HEADER 
                         Having Count(*)= 19 and
                                count(KEY) = count(*)
                        ) and
              header in (select header
                         from other table
                         group by header
                         having sum(case when col = 'Y' then 1 else 0 end) = 0
                        )
    

    等等。您对问题的描述不够清楚,无法给出更详细的代码。

    您能给我们看一下您想要的
    更新
    声明吗?我认为您可以使用
    from
    where
    子句来验证数据。我还没有编写实际的update语句,但我正在查看我所使用的方法是否正确。所以,这是我正在寻找的建议,您正在制作一个包含数字
    1
    的字符串集合。我不知道这有什么帮助。由于您无法告知如果所有验证都成功,您将更新什么,因此我只能建议使用
    if
    update
    join
    .user92546在查询外部,我想的是需要更新的表\u\u\u更新集Complete='N'其中'QUERY BIT在这里'。我想知道的是,是否还有其他方法可以实现这个更新,不幸的是,没有,因为有些甚至没有得到响应