需要一些SQL帮助,可能使用组和计数,或者它需要的任何东西。只是找不到方法。非常感谢。
一个简单的表格:
ColA ColB
2 B
3 B
4 C
5 C
返回所有独特的ColA和ColB对,其中对于相同的ColB,还有更多
而不是一个不同的ColA值。
对于上面给出的数据,它将返回
$ionicScrollDelegate.scrollBottom(true);
答案 0 :(得分:0)
ColA
的规定在ColB
之间有多个不同的值。这是我更新的答案:
SELECT ColA, ColB
FROM test
WHERE EXISTS (
SELECT ColB
FROM test AS subtest
WHERE test.ColB = subtest.ColB
GROUP BY ColB
HAVING COUNT(DISTINCT ColA) > 1
)
GROUP BY ColA, ColB
答案 1 :(得分:0)
您可以使用VS 2013
来检查APPLY
是否有超过1个ColB
个ColA
值的消息:
WITH Cte(ColA, ColB) AS(
SELECT * FROM( VALUES
(1, 'A'), (1, 'A'), (2, 'B'), (3, 'B'), (4, 'C'), (4, 'C'), (5, 'C')
) t(a,b)
)
SELECT DISTINCT c1.*
FROM Cte c1
CROSS APPLY(
SELECT COUNT(*) AS cnt
FROM Cte c2
WHERE
c2.ColB = c1.ColB
AND c2.ColA <> c1.ColA
GROUP BY c2.ColB
HAVING COUNT(*) > 0
) x
答案 2 :(得分:0)
首先使用Group By Clause和Row_Number()我将得到一个数字序列结果集。通过这种方式,我可以识别ColumnA和ColumnB的唯一对,其中对于相同的ColumnB,有多个不同的ColumnA值。
Select
ColumnA,
ColumnB,
Row_Number() Over(Partition By ColumnB Order By ColumnA) As RowNum
From SimpleTable
Group By ColumnB, ColumnA;
输出:
ColumnA ColumnB RowNum
1 A 1
2 B 1
3 B 2
4 C 1
5 C 2
现在您可以将此结果放入表表达式 - CTE或派生表(我选择CTE)并仅过滤掉RowNum大于或等于2的ColumnB值。因此,最终查询将是 -
;With CTE
As
(
Select
ColumnA,
ColumnB,
Row_Number() Over(Partition By ColumnB Order By ColumnA) As RowNum
From SimpleTable
Group By ColumnB, ColumnA
)
Select ColumnA, ColumnB From CTE
Where ColumnB In (Select ColumnB From CTE Where RowNum >=2)
Order By ColumnA, ColumnB;
最终输出:
ColumnA ColumnB
2 B
3 B
4 C
5 C
希望这有用:)
答案 3 :(得分:0)
我建议使用min()
和max()
作为窗口函数的简单方法:
select colA, colB
from (select t.*,
min(colA) over (partition by colB) as mincolA,
max(colA) over (partition by colB) as maxcolA
from t
) t
where mincolA <> maxcolA;