我有样本结果集:
declare @Emp Table (Emp_Name VARCHAR(10),Dept_name VARCHAR(10),Subjects VARCHAR(10),Score VARCHAR(10))
Insert into @EMP(Emp_Name,Dept_name,Subjects,Score)VALUES ('MOHAN','LANGUAGES','English',35)
Insert into @EMP(Emp_Name,Dept_name,Subjects,Score)VALUES ('MOHAN','LANGUAGES','TELUGU',35)
Insert into @EMP(Emp_Name,Dept_name,Subjects,Score)VALUES ('MOHAN','SCIENCE','BIOLOGY',35)
Insert into @EMP(Emp_Name,Dept_name,Subjects,Score)VALUES ('MOHAN','SCIENCE','PHYSICS',35)
Insert into @EMP(Emp_Name,Dept_name,Subjects,Score)VALUES ('MOHAN','SOCIAL','ECONOMICS',35)
Insert into @EMP(Emp_Name,Dept_name,Subjects,Score)VALUES ('MOHAN','SOCIAL','CIVICS',35)
Insert into @EMP(Emp_Name,Dept_name,Subjects,Score)VALUES ('MOHAN','SOCIAL','ECONOMICS',35)
样本数据 :
Emp_Name Dept_name Subjects Score
MOHAN LANGUAGES English 35
MOHAN LANGUAGES TELUGU 35
MOHAN SCIENCE BIOLOGY 35
MOHAN SCIENCE PHYSICS 35
MOHAN SOCIAL ECONOMICS 35
MOHAN SOCIAL CIVICS 35
MOHAN SOCIAL ECONOMICS 35
需要将整个表数据与每个列数据进行比较:
Select COUNT(*) ALL_COl FROM (
select Emp_Name,Dept_name,Subjects,Score from @Emp )T
Select Count(*) Without_Subject_Col FROM (
select DISTINCT Emp_Name,Dept_name,Score from @Emp)TT
Select count(*) Without_Dept_Col from (
select DISTINCT Emp_Name,Subjects,Score from @Emp )TTT
Select COUNT(*) Without_Dept_Subject_Col from (
select DISTINCT Emp_Name,Score from @Emp )TTTT
我怎样才能得到这样的输出:
ALL_COL Without_Subject_Col Without_Dept_Col Without_Dept_Subject_Col
7 3 6 1
建议我如何实现它的方式
不知道为什么你想要这个,但使用带有不同的计数使这非常简单。
Select ALL_COL = COUNT(*)
, Without_Subject_Col = Count(DISTINCT Emp_Name + Dept_name + convert(varchar(5), Score))
, Without_Dept_Col = count(distinct Emp_Name + Subjects + convert(varchar(5), Score))
, Without_Dept_Subject_Col = count(distinct Emp_Name + convert(varchar(5), Score))
from @Emp
您可以外部申请计数吗?
select top 1 a.ALL_COl,
aa.Without_Subject_Col,
aaa.Without_Dept_Col,
aaaa.Without_Dept_Subject_Col
from @EMP e
outer apply
(Select COUNT(*) ALL_COl FROM (
select Emp_Name,Dept_name,Subjects,Score from @Emp )T ) A
outer apply
(Select Count(*) Without_Subject_Col FROM (
select DISTINCT Emp_Name,Dept_name,Score from @Emp)TT ) AA
outer apply
(Select count(*) Without_Dept_Col from (
select DISTINCT Emp_Name,Subjects,Score from @Emp )TTT)AAA
outer apply
(Select COUNT(*) Without_Dept_Subject_Col from (
select DISTINCT Emp_Name,Score from @Emp )TTTT)AAAA
只需选择计数作为子查询
SELECT
(
SELECT COUNT(*) FROM @Emp
) AS ALL_Col,
(
SELECT COUNT(*)
FROM (SELECT DISTINCT Emp_Name, Dept_name, Score FROM @Emp) q
) AS Without_Subject_Col,
(
SELECT COUNT(*)
FROM (SELECT DISTINCT Emp_Name, Subjects, Score FROM @Emp) q
) AS Without_Dept_Col,
(
SELECT COUNT(*)
FROM (SELECT DISTINCT Emp_Name, Score FROM @Emp) q
) AS Without_Dept_Subject_Col;
对rextester here的测试