我有一张表格如下;
Id是主键
+----+---------------+--------------+--------------+--------------+ | Id | BaseQuestionId | ColumnContent| Active Flag | DependentId | +----+--------------------+--------------+--------------+--------------+ | 1 | 0 | Ques One | Y | 0 | | 2 | 0 | Ques Two | Y | 0 | | 3 | 0 | Ques Three | N | 0 | | 4 | 1 | Ques One1 | Y | 1 | | 5 | 1 | Ques One2 | Y | 1 | | 6 | 1 | Ques One4 | Y | 1 | | 7 | 2 | Ques One5 | Y | 1 | | 8 | 2 | Ques One6 | Y | 1 | | 9 | 3 | Ques One7 | Y | 1 | | 10 | 1 | Ques One8 | N | 1 | | 11 | 3 | Ques One9 | N | 1 | | 12 | 3 | Ques One10 | Y | 1 | +----+--------------------+--------------+--------------+--------------+
我需要计算活动问题(活动标志='A')。
通过考虑coulmn DependentId(0基本问题,1依赖问题):
TotalBaseQues = 3其中('2'有效,'1'无效) TotalDependentQues = 9其中('7'有效,'2'无效)
尽管基本问题是无效的,但我需要通过考虑其主动依赖问题来列出基本问题
我需要如下结果: TotalActiveBaseQuestion = 3
请帮帮我。
我需要编写一个查询来获取输出。
答案 0 :(得分:1)
假设只有一个问题的嵌套问题:
SELECT Count(*)
FROM tbl a
WHERE DependentId = 0
AND (
a.[Active Flag] = 'Y'
OR EXISTS (
SELECT 1
FROM tbl b
WHERE b.BaseQuestionID = a.ID
AND b.[Active Flag] = 'Y'
)
)
如果嵌套更深,则需要使用依赖于您正在使用的数据库的迭代和循环。
答案 1 :(得分:0)
SELECT COUNT(*) FROM tbl WHERE DependentId = 0 AND [Active Flag] = 'Y'
答案 2 :(得分:0)
尝试以下方法:
SELECT COUNT(DISTINCT A.Id)
FROM tbl AS A
LEFT JOIN tbl AS B ON B.BaseQuestionId = A.Id AND B.DependantId = 1
WHERE B.Id IS NOT NULL
AND (A.[Active Flag] = 'Y' OR B.[Active Flag] = 'Y')
例如,请参阅我的SQLFiddle。