从表中返回所有"真实"案例

K09*_*K09 1 sql sql-server

我有一个数据库表'Reports'.此表中的每列都是类型bit.因此,如果值为1(即为真)则需要报告.

我有一个存储过程,用于填充临时表,其中所有报告都标记为true.

做这个的最好方式是什么?我的CASE语句只返回第一个TRUE值,当我想要的是报告为TRUE的所有情况.

谢谢!

DECLARE @RequiredReports as table
(
    Report nvarchar(150)
)
INSERT INTO @RequiredReports
(
    Report
)
SELECT 
    CASE 
        WHEN r.ReportCountry = 1 THEN 'Country Report'
        WHEN r.ReportPerson = 1 THEN 'Person Report'
        WHEN r.ReportProfession = 1 THEN 'Profession Report'
        WHEN r.ReportAge = 1 THEN 'Age Report'
    END 
FROM dbo.Reports r
Run Code Online (Sandbox Code Playgroud)

Mik*_*son 5

您可以像这样使用交叉应用:

select T.Name
from dbo.Reports as R
  cross apply (select R.ReportCountry, 'Country Report' union all
               select R.ReportPerson, 'Person Report' union all
               select R.ReportProfession, 'Profession Report' union all
               select R.ReportAge, 'Age Report') as T(Active, Name)
where T.Active = 1
Run Code Online (Sandbox Code Playgroud)

http://data.stackexchange.com/stackoverflow/query/61227/unpivot-reports

在SQL Server 2008及更高版本中,您可以使用values而不是union all.

select T.Name
from dbo.Reports as R
  cross apply (values (R.ReportCountry, 'Country Report'),
                      (R.ReportPerson, 'Person Report'),
                      (R.ReportProfession, 'Profession Report'),
                      (R.ReportAge, 'Age Report')) as T(Active, Name)
where T.Active = 1
Run Code Online (Sandbox Code Playgroud)