根据多行中的值选择行

时间:2015-02-17 23:24:53

标签: sql-server-2012

我有一个像这样的SQL表

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

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

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

Id  ArmNum  Trigger
1   123 Trig1
2   123 Trig2

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

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

由于

1 个答案:

答案 0 :(得分: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
相关问题