如何输出同一列两次,由具有 COUNT 函数的不同 WHERE 子句影响



我需要在不同的条件和别名下输出一列两次。注意:此列也是我从中提取的每个表的PKEY

。为简单起见,假设我要输出两次的列称为 COL1

-我要输出的 COL1的第一个版本包含 COL1 是唯一值的行 我们称之为"UniqueCol1">

-我要输出的COL1的第二个版本包含数据集中多次出现COL1的行 我们称之为"NonUniqueCol1">

我的查询中给我带来麻烦的部分是,对于每个版本的 COL1,需要满足一堆其他不同的条件,涉及连接,而且我不知道在哪里输入我认为我需要的 COUNT 条件。

我在下面删除的代码本质上是我现在的查询。

Select T1.COL2, T1.COL3, count(T1.COL3) as Counted
FROM table1 T1
INNER JOIN table2 T2
ON T1.COL1 = T2.COL1
AND T1.COL2 = T2.COL2
AND T1.COL3 = T2.COL3
WHERE EXISTS 
(
Select 1 
FROM
table2 TT2
inner join table1 TT1
ON TT2.COL1 = TT1.COL1
WHERE TT2.COL4 ='A'
AND TT2.COL5 ='3'
AND TT2.COL6 <> '55555555'
AND TT1.COL7 = 'M'
AND TT2.COL2 = T1.COL2
AND TT2.COL3 = T1.COL3
)
Group BY T1.COL2, T1.COL3
HAVING count(T1.COL2) >=3;

此查询的结果如下所示:

COL2      COL3       Counted
C0067     4355       3
D8120     5777       4
C4444     9009       3
TBC09     1133       3
C0999     4617       3

在 COL3 中计数的条目中,有两个不同的 COL1

  1. 独特的 COL1 值

  2. 多次
  3. 显示的 COL1 值

My desired result is to print COL2, COL3, UniqueCOL1, and NonUniqueCOL1

感谢您的阅读,由于SQL不是我的强项,因此非常感谢您的帮助。

我不确定你是否很好地解释了你想要实现的目标,但这里有一些代码可能会有所帮助,也可能没有帮助。

WITH table1(col1, col2, col3) AS (values ('x','a','a'), ('x','a','a'),('y','a','a'), ('z','a','a'),(null,'a','a'),('x','b','a'),('x','b','a'))
SELECT
T1.COL2
,   T1.COL3
,   count(T1.COL1)          as NonUniqueCOL1
,   count(DISTINCT T1.COL1) as UniqueCOL1
FROM table1 T1
GROUP BY
COL2, COL3

有回报

COL2 |COL3 |NONUNIQUECOL1 |UNIQUECOL1 |
-----|-----|--------------|-----------|
a    |a    |4             |3          |
b    |a    |2             |1          |

最新更新