如果第 2 列中的所有值都具有相同的值,则从第一列查找记录

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

我想获取第一列和第二列中的记录,但仅限于第 3 列中具有相同值 (

LIKE %ABGS%
) 的记录。

我们在 Col1 中有一组 ID,这些 Id 在第 2 列中可以有 1...N 个条目,并且对于第 1 列和第 2 列组合中的每个条目,第 3 列中有不同的值。所以这些组是 Col 1 和 Col 2 和第 3 栏中的不同值。

因此,我只想得到 Col1 和 Col2 的结果,它们在

Col 3 (LIKE %ABGS%)
中具有相同的值。如果 Col1 和 Col2 组下的其中一个条目不具有此状态,则必须将其从结果中排除!

在下表中,您有望了解我的请求范围

表:

第 1 栏 第 2 栏 第 3 栏
PSPID_1 POSID_10 FREI ABGS EROF
PSPID_1 POSID_11 ABGS 埃罗夫
PSPID_1 POSID_12 FREI ABGS
PSPID_2 PSPID_20 FREI ABGS
PSPID_2 PSPID_21 EROF
PSPID_3 POSID_30 ABGS 埃罗夫
PSPID_3 POSID_31 ABGS 埃罗夫
PSPID_3 POSID_32 FREI ABGS EROF
PSPID_3 POSID_33 FREI ABGS

结果应该是:

第 1 栏 第 2 栏
PSPID_1 POSID_10
PSPID_1 POSID_11
PSPID_1 POSID_12
PSPID_3 POSID_30
PSPID_3 POSID_31
PSPID_3 POSID_32
PSPID_3 POSID_33
  • 第 2 列中的 POSID_10、POSID_11、POSID_12 位于第 1 列中的 PSPID_1 下,并且第 3 列中的所有值都具有 LIKE %ABGS% --> 包含在结果中

  • 第 2 列中的 POSID_20、POSID_21 位于第 1 列中的 PSPID_2 下,并且并非第 3 列中的所有值都具有 LIKE %ABGS% --> 从结果中排除

  • 第 2 列中的 POSID_30、POSID_31、POSID_32、POSID_33 位于第 1 列中的 PSPID_3 下,并且第 3 列中的所有值都具有 LIKE %ABGS% --> 包含在结果中

数据的聚类如下:

PSPID_1
- POSID_10
- POSID_11
- POSID_12
PSPID_2
- POSID_20
- POSID_21
PSPID_3
- POSID_30
- POSID_31
- POSID_32
- POSID_33
PSPID_4
- POSID_40
- POSID_41

等等......

sql sql-server
1个回答
0
投票

一种方法是使用窗口

COUNT
获取组中的行数以及符合条件的行数,然后在这些值相同(且大于 1)时进行过滤。结果如下:

DECLARE @SearchValue varchar(4) = 'ABGS';

WITH CTE AS(
    SELECT YT.Column1,
           YT.Column2,
           YT.Column3,
           COUNT(*) OVER (PARTITION BY YT.Column1) AS TotalRows,
           COUNT(CASE WHEN YT.Column3 LIKE '%' + @SearchValue + '%' THEN 1 END) OVER (PARTITION BY YT.Column1) AS SearchRows
    FROM dbo.YourTable YT)
SELECT CTE.Column1,
       CTE.Column2
FROM CTE
WHERE CTE.TotalRows = CTE.SearchRows
  AND CTE.SearchRows > 0;
© www.soinside.com 2019 - 2024. All rights reserved.