对于具有多个标志集的记录,Sql返回多行

时间:2015-03-01 21:45:29

标签: sql sql-server tsql

亲爱的智能开发人员,

给出以下数据集:

Name    Football  Tennis  Snowboarding
--------------------------------------
Jane    true      false   false
Jack    true      true    false
Sue     false     true    true

我想从SQL查询中获取以下输出:

Name    Sport
-------------
Jane    Football
Jack    Football
Jack    Tennis
Sue     Tennis
Sue     Snowboarding

知道如何做到这一点? (我需要这个来简化SQL报告的创建)

提前致谢, AllWorkNoPlay

2 个答案:

答案 0 :(得分:4)

您可以通过各种方式执行此操作。这是一个cross apply的方法:

select v.name, v.sport
from table t cross apply
     (values (t.name, 'football', t.football), 
             (t.name, 'tennis', t.tennis), 
             (t.name, 'Snowboarding', t.Snowboarding)
     ) v(name, sport, flg)
where flg = 'true';

答案 1 :(得分:1)

这通常使用UNIONs来完成:

select Name, 'Football' as Sport
from tab
where Football = 'true'
UNION ALL
select Name, 'Tennis' as Sport
from tab
where Tennis = 'true'
UNION ALL
select Name, 'Snowboarding' as Sport
from tab
where Snowboarding = 'true'

当然,在标准化数据模型中,这将更容易:)