2012-12-14 18 views
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在该类别下不为null时,我想要在类别下提取字段。对于我上面的例子的结果应该是:选择查询以在其类别(组)下至少有一个非空值时选择行

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

正如你可以看到在类别1场2具有空值,但它仍然显示。在类别2下,field3和field4都有空值,所以不应该被选中。

有人可以帮我用sql查询上述问题吗?我认为的一种方法是使用groupby类别并查看count(FieldValue)> 0,其中fieldvalue不为null。但我坚持如何将这个逻辑到SQL?

在此先感谢。

回答

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 ; 
4
select * 
from table2 
where category in (select distinct category 
        from table2 
        where fieldvalue is not null) 
+0

我不认为你需要在子查询中的distinct关键字。 – sventevit

-1

SELECT * FROM(

选择不同FieldId,字段名,fieldValue方法,从表1类别 ,表2 b 其中a.CatId = b的。类别 )

其中fieldvalue不是nul升;

相关问题