Day1 Day2 Day3 Day4 Day5 Day6 Day7 Day8 Day9 Day10 Day11 Day12 Day13 Day14 Day15 Day16 Day17 Day18 Day19 Day20 Day21 Day22 Day23 Day24
A A A A A A WO B B B B B B WO C C C C C C WO A A A
我有上述格式的数据。我需要选择在同一行中存在多少个“A”。
A,B,C 代表轮班时间 WO - Week of
Day1 , Day2 ... 每个月都可以不同。
您也可以尝试如下使用unpivot
.
select count(*) as 'ACount' from
(
select u.x,u.y
from youtable s
unpivot
(
[y]
for [x] in (Day1,Day2,Day3,Day4...)
) u
) t where t.y='A'
如果你想让它动态,你可以尝试如下。
create table test_1(day1 varchar(10),day2 varchar(10),day3 varchar(10))
insert into test_1 select 'a','b','a'
--Generate Columns Dynamically
declare @colsUnpivot nvarchar(max)
= stuff((select ','+quotename(C.name)
FROM sys.columns c
WHERE c.object_id = OBJECT_ID('dbo.test_1')
for xml path('')), 1, 1, '')
--Form the dynamic query
declare @query nvarchar(max)=' select count(*) as ACount from
(
select u.x,u.y
from test_1 s
unpivot
(
[y]
for [x] in (' + @colsUnpivot + ')' +
') u' +
') t where t.y=''A'''
--Finally execute it
exec sp_executesql @query
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句