在我的查询场景中需要帮助

时间:2014-08-07 08:05:28

标签: sql sql-server sql-server-2008

我需要帮助编写以下数据的查询(SecondaryTable),

--------------------------------------------------------------------------------
PrimaryID1     PrimaryID2     TableID     FlagField     ServiceID     FieldData
--------------------------------------------------------------------------------
PID11          PID21          1             1             6             ABC
PID11          PID21          2             0             6             DEF
PID11          PID21          3             1             7             ABC
PID11          PID21          4             0             7             DEF 
PID11          PID21          5             0             8             ABC
PID11          PID21          6             0             8             DEF 
PID11          PID21          7             1             9             ABC
PID11          PID21          8             0             9             DEF 

我需要编写一个查询,在其中我将其与粒度级别为“PrimaryID1”和“PrimaryID2”的表(MainTable)连接,对于“PrimaryID1”和“PrimaryID1”的组合,要求是这样的PrimaryID2“如果表格对于(6,7,8,9)的任何一个”ServiceID“具有”FlagField“= 1,则该字段需要标记为”1“。

这就是我现在所感染的方式,

SELECT
      MT.PrimaryID1,
      MT.PrimaryID2,
      CASE WHEN (SELECT TOP 1 ST.FieldID
                 FROM SecondaryTable
                 WHERE ServiceID IN (6,7,8,9) AND 
                       ST.PrimaryID1 = MT.PrimaryID1 AND
                       ST.PrimaryID2 = MT.PrimaryID2) IS NULL
           THEN 0 
           ELSE 1
      END AS SecondaryTableFlag

FROM  MainTable MT

我知道,如果前1名为'0',那么我被搞砸了,我甚至想到在相关查询中有一个订单,但这不起作用(显然!!)。需要知道是否有任何替代方法。

在上面的“SecondaryTable”数据的情况下,这应该是我的输出,但我不确定我的上述查询

-------------------------------------------------
PrimaryID1     PrimaryID2    SecondaryTableFlag
-------------------------------------------------
PID11          PID21         1

1 个答案:

答案 0 :(得分:0)

得到这种情况的答案告诉我一些事情,有时我们必须认为简单而不是思考太复杂。刚刚使用MAX()函数更改了TOP 1。

ANSWER
    SELECT
          MT.PrimaryID1,
          MT.PrimaryID2,
          (SELECT ISNULL(MAX(ST.FieldID),0)
           FROM SecondaryTable
           WHERE ServiceID IN (6,7,8,9) AND 
                 ST.PrimaryID1 = MT.PrimaryID1 AND
                 ST.PrimaryID2 = MT.PrimaryID2) 
           AS SecondaryTableFlag

    FROM  MainTable MT