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