Sql 行计数选择 - MS SQL

伊兰戈·森戈泰扬
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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章