3
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?

提前致谢。

4

3 回答 3

4
select *
from table2
where category in (select distinct category 
                   from table2 
                   where fieldvalue is not null)
于 2012-12-14T10:12:00.037 回答
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 ;
于 2012-12-14T10:14:39.003 回答
-1

选择 * 从 (

选择不同的 FieldId,FieldName,FieldValue,Category from table1 a,table2 b where a.CatId = b.category )

其中字段值不为空;

于 2012-12-14T11:07:45.977 回答