我有以下数据,我需要帮助查询SQL过滤器:
Table1
A B
1 1
1 2
1 3
2 1
3 1
3 2
4 1
5 1
5 2
5 3
我需要一个查询的帮助,当B的计数(不是值)大于1但我不想要分组时,该查询只返回A和B中的数据。例如:
A B
1 1
1 2
1 3
3 1
3 2
5 1
5 2
5 3
通知2&缺少4个,因为它们只有B列中的一个计数。
这是我到目前为止所做的:
SELECT Table1.A, Count(Table1.B) AS [Count of B]
FROM Table1
GROUP BY Table1.A
HAVING (((Count(Table1.[B]))>1))
ORDER BY A
然而我无法摆脱GROUP BY声明!!
有人可以协助吗?
非常感谢
答案 0 :(得分:0)
以下是使用标准SQL的一种方法:
select t.*
from table1 t
where (select count(*) from table1 t2 where t2.a = t.a) > 1
答案 1 :(得分:0)
这样做的一种方法是隐藏子查询中的分组,因此您的主查询不会被分组:
SELECT *
FROM table1
WHERE b IN (SELECT b
FROM table1
GROUP BY b
HAVING COUNT(*) > 1)
答案 2 :(得分:0)
SELECT Table1.*
FROM Table1
WHERE Table1.A IN
(
SELECT Table1.A
FROM Table1
GROUP BY Table1.A
HAVING Count(Table1.B) > 1
)
答案 3 :(得分:0)
如果您的B列只有不同的值(或者您有其他行idwntifier),则无需分组即可执行特定任务:
select
t.A, t.B
from Table1 as t
where
exists (
select *
from Table1 as tt
where tt.A = t.A and tt.B <> t.B
)
至于更一般的答案 - 你可以使用窗口函数(如果你的RDBMS支持它),比如
with cte as (
select *, count(*) over(partition by A) as cnt
from Table1
)
select A, B
from Table1
where cnt > 1
答案 4 :(得分:0)
count()结束,分区依据将完成工作
SELECT tbl1.*
FROM (SELECT COUNT (1) OVER (PARTITION BY tbl.B) cnt, tbl.*
FROM Table1 tbl) tbl1
WHERE tbl1.cnt > 1
答案 5 :(得分:0)
这不会完全摆脱GROUP BY,但会在子查询中执行,因此您的结果将与您希望的一样:
SELECT A, B
FROM Table1
WHERE NOT A IN(
SELECT A
FROM Table1
GROUP BY A
HAVING COUNT(B) = 1
)
ORDER BY A