2011-05-13 45 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