2012-12-14 48 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升;

相關問題