0

我有一个具有这样结构的表,其中对于每个 ID,a、b、c 和 d 列的布尔值为 True 或 False:

原始表

我正在尝试查询表以生成只有 2 列(ID 和 val)的视图。我需要每一行都包含一个元组,其中包含一个 ID 和该 ID 值为 True 的列的名称。如果多个列具有该 ID 的 True 值,则它们将位于不同的行上,如下所示:

所需的查询输出

我不确定这是否可能并且不知道如何解决这个问题,因为我以前不需要在 SQL 中做这样的事情,但如果有人能给我任何有用的提示或指导,我将不胜感激。谢谢!

编辑:我正在尝试在 MS Access 2016 中执行此操作。

4

2 回答 2

0

试试这个(对于 T-SQL):

declare 
    @t table (ID int, a varchar(10), b varchar(10), c varchar(10), d varchar(10))

insert into @t
select 1, 'True', 'False', 'False', 'True'
union all
select 2, 'False', 'False', 'True', 'False'
union all
select 3, 'True', 'True', 'True', 'False'
union all
select 4, 'False', 'True', 'False', 'True'


SELECT ID, col, val  
FROM   
    (SELECT ID, a, b, c, d 
    FROM @t) p  
UNPIVOT  
    (val FOR col IN   
        (a, b, c, d)  
)AS unpvt
where val='True'
于 2020-12-11T21:32:57.297 回答
0

我想出了这个:

With base as (
  Select id, ‘a’ Val
  From table
  Where a = true
  Union all
  Select id, ‘b’ Val
  From table
  Where b = true
  Union all
  Select id, ‘c’ Val
  From table
  Where c = true
  Union all
  Select id, ‘d’ Val
  From table
  Where d = true
)
Select ID, Val
From base
Order by ID, Val;

让您知道有关它如何为您工作的问题或想法。. .

于 2020-12-11T21:23:42.733 回答