我需要帮助编写以下数据的查询(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
答案 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