【问题标题】:Select query to select rows when it has atleast one not null value under its category (group)选择查询以在其类别(组)下具有至少一个非空值时选择行
【发布时间】:2012-12-14 19:07:45
【问题描述】:
Table1

    CatId     Name
    1       Category1
    2       Category2
    3       Category3

Table2

FieldId     FieldName    FieldValue   Category
1            Field1        Value1        1
2            Field2        NULL          1
3            Field3        NULL          2
4            Field4        NULL          2
5            Field5        Value2        3
6            Field6        Value3        3

我有一个如上所示的表结构。当该类别下的任何 Fieldvalue 不为空时,我想获取该类别下的字段。对于我上面的示例结果应该是:

FieldId     FieldName    FieldValue   Category
    1         Field1        Value1        1
    2         Field2        NULL          1
    5         Field5        Value2        3
    6         Field6        Value3        3

您可以在 category1 下看到 field2 具有空值,但仍会显示。在类别 2 下,field3 和 field4 都有空值,因此不应选择它。

有人可以帮我解决上述问题的 sql 查询吗?我认为的一种方法是使用 groupby 类别并查看 count(FieldValue)>0 ,其中 fieldvalue 不为空。但我被困在如何将这个逻辑带入 sql 中?

提前致谢。

【问题讨论】:

    标签: sql sql-server sql-server-2008


    【解决方案1】:
    select *
    from table2
    where category in (select distinct category 
                       from table2 
                       where fieldvalue is not null)
    

    【讨论】:

    • 我认为您不需要子查询中的 distinct 关键字。
    【解决方案2】:
    SELECT
        FieldId 
      , FieldName 
      , FieldValue 
      , Category
    FROM 
        Table2 AS t
    WHERE
        EXISTS
            ( SELECT *
              FROM Table2 AS tn
              WHERE tn.Category = t.Category
                AND tn.FieldValue IS NOT NULL
            ) ;
    

    或:

    SELECT
        t.FieldId 
      , t.FieldName 
      , t.FieldValue 
      , t.Category
    FROM 
            Table2 AS t
        JOIN
            ( SELECT Category
              FROM Table2
              GROUP BY Category
              HAVING MIN(FieldValue) IS NOT NULL
            ) AS tn 
          ON tn.Category = t.Category ;
    

    【讨论】:

      【解决方案3】:

      选择 * 从 (

      选择不同的 FieldId、FieldName、FieldValue、Category 从表 1 a、表 2 b 其中 a.CatId = b.category )

      其中字段值不为空;

      【讨论】:

        猜你喜欢
        • 2021-11-11
        • 2013-03-07
        • 2017-04-11
        • 2020-11-19
        • 1970-01-01
        • 2012-09-13
        • 2017-10-20
        • 2021-05-22
        • 1970-01-01
        相关资源
        最近更新 更多