gpt4 book ai didi

sql-server - TSQL 查找组中的所有记录是否具有相同的值

转载 作者:行者123 更新时间:2023-12-03 16:53:10 25 4
gpt4 key购买 nike

我有一个表,其中包含一个用于分组的字段和另一个保存数据的字段。我想要一个很好的方法来找到任何 GroupColumn 值,其中每个 DataColumn 值都包含一个特定的值。

示例

+-------------+------------+
| GroupColumn | DataColumn |
+-------------+------------+
| GroupA | Data1 |
| GroupA | Data2 |
| GroupA | Data3 |
| GroupB | Data1 |<---These two values are the same
| GroupB | Data1 |<---for the same group
| GroupC | Data1 |
| GroupC | Data2 |
| GroupC | Data2 |
| GroupC | Data3 |
+-------------+------------+

期望输出

B组

在上面的示例中,GroupA 和 GroupC 的 DataColumn 发生了变化,但对于 GroupB,DataColumn 中的两个值都相同,因此我希望返回此结果。

当前解决方案

我有 2 个基于相同主题的当前解决方案,但我觉得这是 SQL 应该能够以更简单的方式完成的事情。
  • 将表格中的所有内容分组,计算 GroupColumn 出现的次数并将其放入表格中。做同样的事情,但应用一个条件。加入 2 个表并查看 2 个计数不匹配的地方。
    SELECT GROUPCOLUMN, COUNT(*) [TOTAL] INTO #ALL
    FROM #TABLE
    GROUP BY GROUPCOLUMN

    SELECT GROUPCOLUMN, COUNT(*) [TOTAL] INTO #SOME
    FROM #TABLE
    WHERE DATACOLUMN = 'DATA1'
    GROUP BY GROUPCOLUMN

    SELECT * FROM #ALL A
    INNER JOIN #SOME S ON A.GROUPCOLUMN = S.GROUPCOLUMN
    WHERE S.TOTAL = A.TOTAL
  • 使用 SUM 和 CASE 检查特定值并计算所有内容并检查子查询。
    SELECT * FROM 
    (SELECT GROUPCOLUMN, SUM(CASE WHEN DATACOLUMN = 'DATA1' THEN 1 ELSE 0 END) [VALUE], COUNT(*) [TOTAL] FROM #TABLE (NOLOCK)
    GROUP BY GROUPCOLUMN) A
    WHERE A.VALUE = A.TOTAL

  • 有没有更好的方法在 SQL 中做到这一点?

    提前致谢。

    忍者

    最佳答案

    您正在寻找 HAVING条款

    SELECT GROUPCOLUMN
    FROM #TABLE (NOLOCK)
    GROUP BY GROUPCOLUMN
    HAVING Count(*) = Count(case when DATACOLUMN = 'DATA1' then 1 end)

    关于sql-server - TSQL 查找组中的所有记录是否具有相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39922045/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com