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
正如您在category1中看到的,field2具有空值但仍显示。在类别2下,field3和field4都具有空值,因此不应选择它。
有人可以帮我解决上述问题的SQL查询吗?我认为的一种方法是使用groupby类别并查看count(FieldValue)> 0,其中fieldvalue不为null。但我被困在如何将这个逻辑带入sql?
提前致谢。
答案 0 :(得分:4)
select *
from table2
where category in (select distinct category
from table2
where fieldvalue is not null)
答案 1 :(得分: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 ;
答案 2 :(得分:-1)
SELECT * FROM(
选择不同的FieldId,FieldName,FieldValue,Category 来自table1 a,table2 b 其中a.CatId = b.category )
其中fieldvalue不为null;