如何将列数据与整个表数据进行比较

问题描述 投票:0回答:3

我有样本结果集:

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

建议我如何实现它的方式

sql sql-server tsql
3个回答
0
投票

不知道为什么你想要这个,但使用带有不同的计数使这非常简单。

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

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
投票

只需选择计数作为子查询

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的测试

© www.soinside.com 2019 - 2024. All rights reserved.