TSQL根据表B中是否存在特定记录来填充表A中的布尔值

TSQL根据表B中是否存在特定记录来填充表A中的布尔值,tsql,Tsql,我有两张桌子: | ID | HasA | HasB | HasC | Foo | Bar | |----|------|------|------|-----|-----| | 12 | | | | X | Y | | 43 | | | | Y | X | | ID | Type | |----|------| | 12 | A | | 43 | B | | 12 | C | | 43 | A

我有两张桌子:

| ID | HasA | HasB | HasC | Foo | Bar |
|----|------|------|------|-----|-----|
| 12 |      |      |      |  X  |  Y  |
| 43 |      |      |      |  Y  |  X  |


| ID | Type |
|----|------|
| 12 |  A   |
| 43 |  B   |
| 12 |  C   |
| 43 |  A   |
我想将结果填充到表A中,使其看起来像:

| ID | HasA | HasB | HasC | Foo | Bar |
|----|------|------|------|-----|-----|
| 12 | true |      | true |  X  |  Y  |
| 43 | true | true |      |  Y  |  X  |

怎么做?

将其分为两部分:

首先,在需要时使用CASE来计算“HasX”。这是select语句的内部子查询

SELECT subqueryA.ID
, CASE WHEN sum(subqueryA.HasA) > 0 THEN 'true' ELSE 'false' END as HasA 
, CASE WHEN sum(subqueryA.HasB) > 0 THEN 'true' ELSE 'false' END as HasB 
, CASE WHEN sum(subqueryA.HasC) > 0 THEN 'true' ELSE 'false' END as HasC 
, foobar.foo
, foobar.bar
FROM
[dbo].[ABC_FooBar] foobar LEFT JOIN
(
SELECT a.ID as ID
, CASE ABCType WHEN 'A' THEN 1 ELSE 0 END as HasA
, CASE ABCType WHEN 'B' THEN 1 ELSE 0 END as HasB
, CASE ABCType WHEN 'C' THEN 1 ELSE 0 END as HasC
FROM  [dbo].[ABC] a 
) subqueryA  on foobar.ID = subqueryA.ID
GROUP BY subqueryA.ID, foobar.foo, foobar.bar
其次,使用内部连接将其连接到FooBar表,然后对“HasX”列进行求和以合并它们,然后使用CASE返回true/false值。这是外部返回的select语句

SELECT subqueryA.ID
, CASE WHEN sum(subqueryA.HasA) > 0 THEN 'true' ELSE 'false' END as HasA 
, CASE WHEN sum(subqueryA.HasB) > 0 THEN 'true' ELSE 'false' END as HasB 
, CASE WHEN sum(subqueryA.HasC) > 0 THEN 'true' ELSE 'false' END as HasC 
, foobar.foo
, foobar.bar
FROM
[dbo].[ABC_FooBar] foobar LEFT JOIN
(
SELECT a.ID as ID
, CASE ABCType WHEN 'A' THEN 1 ELSE 0 END as HasA
, CASE ABCType WHEN 'B' THEN 1 ELSE 0 END as HasB
, CASE ABCType WHEN 'C' THEN 1 ELSE 0 END as HasC
FROM  [dbo].[ABC] a 
) subqueryA  on foobar.ID = subqueryA.ID
GROUP BY subqueryA.ID, foobar.foo, foobar.bar