Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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 - Fatal编程技术网

基于特定条件的SQL查询

基于特定条件的SQL查询,sql,sql-server,Sql,Sql Server,图1表示表A和表B的当前状态 当前的实现是在新市场或现有市场的情况下,将新MID提取到表B并从基本流程复制SqlQuery。以下查询用于此操作: SELECT A.MId, B1.Loop, B1.Segment, B1.SqlQuery, B1.UseDefault FROM TableB B1 WITH (NOLOCK) INNER JOIN TableA A WITH (NOLOCK) ON B1.MId IN (100, 200)

图1表示表A和表B的当前状态

当前的实现是在新市场或现有市场的情况下,将新MID提取到表B并从基本流程复制SqlQuery。以下查询用于此操作:

SELECT A.MId, B1.Loop, B1.Segment, B1.SqlQuery, B1.UseDefault
FROM TableB B1 WITH (NOLOCK)
INNER JOIN TableA A WITH (NOLOCK) ON B1.MId IN (100, 200) 
                                  AND B1.MId = A.BaseMarket 
                                  AND ISNULL(A.POCId, 0) > 0
LEFT JOIN TableB B2 WITH (NOLOCK) ON A.MId = B2.MId
WHERE B2.MId IS NULL
图2显示了表A中的更新数据和表B中所需的状态。所需的实现将是:

  • 如果是新市场(XYZ market-20012002),将新MID提取到表B并从基本进程复制SqlQuery
  • 如果市场配置已经存在于表B(市场ABC-1001和1002)中,则复制现有配置的SqlQuery
  • 下面是表A和表B的完整流程。两个表中的基本配置(100和200)最初都是手动插入的,包括循环和段

  • 引入了一个新市场,并在表A中创建了一个新的MId。让我们假设市场ABC为1001和1002

  • 在表B中为每个MId插入相应的记录,并从表B中的基本配置复制数据。插入的记录(SqlId-3和4)

  • 由于特定的业务请求,表B中的SqlQuery列被手动更新。(SqlId-3和4)。因此,使用不同的查询

  • 市场ABC在前端更新,在表A中创建了两个新条目(MId-1003和1004)。此外,新市场XYZ(2001年中期和2002年)也已创建

  • 表B中创建的相应条目应参考市场XYZ(SqlId-7和8)的基本配置,因为这是一个新市场,但应复制市场ABC(MId-1001和1002)的现有配置,因为其配置已经存在


  • 我正在寻找一个建议,如果一个单一的查询可以实现这个要求使用案例语句。我会感谢你的帮助

    我猜市场配置已经存在你实际上是指
    市场名称
    类型
    的组合。这就是问题所在

    SELECT
      A.NewId, B.Loop, B.Segment, B.SqlQuery, B.UseDefault
    FROM (
      SELECT
        A1.MId AS NewId, A2.MId AS RefId
      FROM
        TableA A1
      INNER JOIN
        TableA A2
      ON
        (A1.MarketName = A2.MarketName AND A1.Type = A2.Type) -- use your market configuration logic here
      OR
        A1.BaseMarket = A2.BaseMarket
      WHERE
        A1.Mid NOT IN (SELECT MId FROM TableB)
    ) As A
    INNER JOIN
      TableB B
    ON (A.RefId = B.MID)
    
    首先,我们在这里自连接
    TableA
    以获取参考MId作为
    RefId
    。然后,我们将新的派生表与
    TableB
    连接起来


    希望这有帮助。谢谢大家!

    因此,您正在从
    TableA
    行插入
    TableB
    中,而这些行不在
    TableB
    中,对吗?对于表B。。。这个片段来自哪里?SqlQuery从何而来?UsedFault从何而来?图像并不是共享数据的好方法。这里还需要解释一些输出。您所需的输出中有一些行在示例数据中不存在。我已经为这个问题添加了更多解释,对于使用这些图像,我深表歉意。我只是认为图像中的颜色编码可以更好地理解这个问题。我的错!