我有一个数据库表'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)
您可以像这样使用交叉应用:
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)
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |