2015-02-17 78 views
0

我有这样选择基于值的行,多行

Id Idea  Trigger 
1 CoreOne  Trig1 
2 CoreOne  Trig2 
3 CorePlus Trig3 
4 CorePlus Trig1 
5 CorePP  Trig4 

SQL表基本上,每个想法有一个触发器。每个想法可以有多个触发器,每个触发器可以用来触发多个想法。但是所有触发器都必须存在才能启动。

从另一张桌子上,我明白了。

Id ArmNum Trigger 
1 123 Trig1 
2 123 Trig2 

每个手臂都会产生触发器。我需要现在匹配两张表,并且能够说出对于Arm 123,Idea,可以启动CoreOne,因为两个触发器都存在。但CorePlus不可能是因为它需要Trig3。

任何想法。我似乎完全失去了这一个。

感谢

+0

如果您向示例数据添加了少量(3-4个)更多元素,这将有所帮助。没有更多的触发器,更多的想法,更少的武器可以说明各种情况。然后展示最终结果应该如何。 – 2015-02-18 01:16:22

回答

0

我不知道很多关于你的数据,它看起来像你的样本数据并没有说明各种方案,但下面会工作或将是一个很好的出发点的工作。

GO 
DECLARE @t1 TABLE (Id int, Idea varchar(100), [Trigger] varchar(100)) 
DECLARE @t2 TABLE (Id int, ArmNum int, [Trigger] varchar(100)) 
DECLARE @t4 TABLE (Id int, Idea varchar(100), ArmNum int, [Trigger] varchar(100)) 
INSERT INTO @t1 VALUES (1,'CoreOne','Trig1'), (2,'CoreOne','Trig2'),(3,'CorePlus','Trig3'), (4,'CorePlus', 'Trig1'),(5, 'CorePP', 'Trig4') 
INSERT INTO @t2 VALUES (1, 123, 'Trig1'), (2,123,'Trig2') 

INSERT INTO @t4 
SELECT t1.id, t1.idea, t2.ArmNum, t2.[Trigger] 
FROM @t1 t1 
LEFT JOIN @t2 t2 on t1.[Trigger] =t2.[Trigger] 

SELECT DISTINCT idea, ArmNum, 'Y' [Launch?] FROM @t4 
WHERE idea NOT IN (SELECT idea FROM @t4 where armNum IS NULL) 
GO