2011-05-13 71 views
1

我试图从表“Table1”中选择所有记录,但我想要一个名为“HasException”的包含“0”或“1”的新列。如果与来自“Table2”的当前Id相匹配的行的计数等于0,则“HasException”必须为“0”,否则返回1.在T-SQL中获取子查询的当前记录

这是我迄今为止所做的,但它不起作用:

SELECT *, 
CONVERT(bit, (CASE WHEN (SELECT count(Id) FROM Table2 WHERE Table1.Id=Table2.Id) = 0 THEN 0 ELSE 1 END)) AS HasException 
FROM Table1 
+0

你有表2中的代码,但没有说明。 ? – gbn 2011-05-13 13:37:35

+0

是的,当Table2.ID中有多于0行匹配当前的Table1.ID时,我想显示1。 – 2011-05-13 13:39:55

回答

1

你想加入(对ID和组)表之前,你可以比较像这样的两个值:

SELECT dbo.Table_1.*, 
    CASE WHEN COUNT(dbo.Table_2.ID) = 0 THEN 
     0 
    ELSE 
     1 
    END 
    AS HasException 
FROM   dbo.Table_1 LEFT OUTER JOIN 
         dbo.Table_2 ON dbo.Table_1.ID = dbo.Table_2.ID 
GROUP BY dbo.Table_1.ID 
1

也许是类似的,假设你的意思是table2?

SELECT *, 
    CAST(CASE WHEN COUNT(table2.id) = 0 THEN 0 ELSE 1 END AS bit) AS HasException 
FROM 
    Table1 
    LEFT JOIN 
    Table2 ON Table1.Id=Table2.Id 
GROUP BY 
    Table1.id 
1
select 
    T1.*, 
    case when T2.Id is null then 0 else 1 end as HasException 
from Table1 as T1 
    left outer join 
    (
     select distinct Id 
     from Table2 
    ) as T2 
    on T1.Id = T2.Id