我有如下表:T-SQL:计数和集团通过在多个列
Name | Col1 | Col2 | Col3 John A B C John A D A Bill A A D Bill F A A Steve F A B Steve C C A
我想知道一共有多少正如约翰,比尔和史蒂夫有...
例如约翰:3,比尔:4,史蒂夫:2
我怎么能使用T-SQL做到这一点?谢谢。
我有如下表:T-SQL:计数和集团通过在多个列
Name | Col1 | Col2 | Col3 John A B C John A D A Bill A A D Bill F A A Steve F A B Steve C C A
我想知道一共有多少正如约翰,比尔和史蒂夫有...
例如约翰:3,比尔:4,史蒂夫:2
我怎么能使用T-SQL做到这一点?谢谢。
试试这个SQL Fiddle For below:
declare @table table (name varchar(10), c1 char(1), c2 char(1), c3 char(1))
insert into @table
SELECT 'John','A','B','C' UNION
SELECT 'John','A','D','A' UNION
SELECT 'Bill','A','A','D' UNION
SELECT 'Bill','F','A','A' UNION
SELECT 'Steve','F','A','B' UNION
SELECT 'Steve','C','C','A'
; WITH CTE AS
(
SELECT name,
(SELECT Count(CASE WHEN val = 'A' Then 1 ELse Null end)
FROM (VALUES (c1),(c2),(c3)) AS value(val)) As ACOL
from @table
)
SELECT Name, SUM(ACOL) ACount FROM CTE GROUP BY NAME
可以使用UNPIVOT
功能:
select name, count(val) TotalAs
from yourtable
unpivot
(
val
for col in (col1, col2, col3)
) u
where val = 'A'
group by name
这样如何为SQL Server 2012?它可能会更快。
select name,sum(datalength(concat(col1,col2,col3))-
datalength(replace(concat(col1,col2,col3),'A','')))
from yourtable
group by name;
您的意思是max A或max any? – Paparazzi