我有示例结果集:
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
建议我如何实现
答案 0 :(得分:1)
您可以在外部应用计数吗?
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
答案 1 :(得分:1)
只需选择计数作为子查询
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;
在上个月的测试 here
答案 2 :(得分:0)
不知道为什么要这么做,但是使用count和different可以使事情变得很简单。
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