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でわかるように、field2にはnull値がありますが、それでも表示されます。カテゴリ2では、field3とfield4の両方にnull値があるため、選択しないでください。

誰かが上記の問題のSQLクエリを手伝ってくれますか?私が考えた1つの方法は、groupbyカテゴリを使用して、fieldvalueがnullではないcount(FieldValue)>0を確認することです。しかし、私はこのロジックを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

SELECT * FROM(

table1 a、table2 bから個別のFieldId、FieldName、FieldValue、Categoryを選択します。ここでa.CatId = b.category)

ここで、fieldvalueはnullではありません。

于 2012-12-14T11:07:45.977 に答える