2015-02-17 74 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